問題タブ [table-per-hierarchy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - Hibernate にオーバーライドされたプロパティの SqlParameter がありません
FluentNHibernate AutoMapping を使用して、階層ごとのテーブル アプローチを実装しようとしています。
基本クラスと 3 つの子クラスがあります。3 番目の子クラスは、基本クラスのいくつかのプロパティをオーバーライドします。最初の 2 つの子クラスのインスタンスは正常に保存されますが、プロパティをオーバーライドして 3 番目のクラスのインスタンスを保存しようとすると、
NHibernate はオーバーライドされたプロパティに SqlParamaters を追加しないようですが、値を設定しようとします。
それを修正する方法は?多分マッピング/構成のいくつかの変更?
スタックトレース:
entity-framework-5 - 最初にEntity Framework 5モデルを使用して階層ごとにテーブルを生成する方法
最初にエンティティ フレームワーク 5 モデルで Visual Studio 2012 を使用しています。階層戦略ごとのテーブルを使用してデータベースを生成したいのですが、そのオプションが見つかりません。Visual Studio 2012 では Entity Designer Database Generation Power Pack を使用できないか、見つかりません。
誰でも提案はありますか?
sql - SQL Server クエリを使用して階層内のループを検出する
重複の可能性:
SQL - 親子関係のループの検出
id
私は2つの列を持つ単純なテーブルを持っていますparentid
:
たとえば、上記の表では、1 は 1 自体の子です (1->2->3->4->1)。そのようなケースをどのように検出しますか?
追加の列が必要ですか?
entity-framework - 階層ごとのテーブルと継承された関係
.Net 4.5 を対象とする Entity Framework 5 を使用しています。私の人生では、階層ごとのテーブルとナビゲーション列を操作しようとしているときに、次のエラーを引き起こしている何が間違っているのかわかりません。
列名 'Game_Category' が無効です。
列名 'Game_Value' が無効です。
列名 'Type_Category' が無効です。
列名 'Type_Value' が無効です。
抽象基本クラスは次のとおりです (カテゴリと値の複合 PK に注意してください)。
追加の列を追加しない 2 つのサブクラスが続きます...
Game および SetType への Navigation プロパティを持つクラスを次に示します...
私のデータコンテキストから...
ルックアップ テーブルには、LookupType という名前の識別子列があります。テーブル/継承に関するいくつかのチュートリアルを読みました。他の 2 つ - 同様に構築されたオブジェクトを使用する TPT と TPC は簡単でした。上記のエラーは理解していますが、慣例により FK 列を探していることは理解していますが、何が間違っているか、または欠落していて、それらの列を探す原因になっているのかわかりません。GameId および TypeId プロパティに ForeignKey 属性を配置しようとしましたが、従属/主関係の制約に関するエラーが発生し、カテゴリを追加の外部キーとして指定する方法がわかりません。
ナビゲーション プロパティを使用しているときに、テーブル/継承に関するチュートリアルをまだ見つけていません。どんな助けでも大歓迎です.これは私を1時間以上夢中にさせています.
アップデート:
問題は、キーの一部としてのカテゴリの使用にあると思います。CardSet には、そのルックアップの「ゲーム」のカテゴリまたはそのルックアップの「セット タイプ」のカテゴリの 2 つのプロパティがありません。これらのプロパティを作成しようとしましたが、うまくいきませんでした。Fluent API を使用して設定することはできますか? 私はこれまでに何十回も試みましたが、運がありませんでした。
c# - TPH 継承を使用してデータベース設計を改善する
これが私の現在のデータベース設計です。今のところ、学生、教師、およびクラスのテーブルを見てください。
TPH 継承を使用して、いくつかのテーブルをニュースに変換しようとしています。例えば。
以下を含む Person という名前の新しいテーブルを作成します。
- イド、
- フルネーム、
- EnrollmentDate (学生の場合),
- メール(学生用)、
- HireDate (教師用)
しかし、テーブルClassId
に含まれているというフィールドが 1 つ残っていますか。現時点では、結合テーブルを作成してandを格納する必要があるのか 、それとも単にテーブルに配置するStudent
必要があるのか わかりません。それは私の大きな疑問です。ClassId
PersonId
ClassId
Person
ClassId
フィールドはどこに置く必要がありますか?
各生徒は 1 つのクラスにしか所属できないことを言及しておく必要があります。教師は、必要に応じて多くのクラスを持つことができます。
entity-framework - SaveChanges が TPH エンティティに対して機能しない
Generate T-SQL Via T4 (TPH).xaml (VS) および SSDLToSQL10.tt (VS) テンプレートでエンティティ フレームワークを使用します。私はテーブルを持っています
2 つのユーザー タイプがあるため、フィールド IsPaid が識別子です。モデルに TPH を作成しました。.tt 経由で生成されたクラスは
ID 3 の正規ユーザーがいるとします。同じデータで新しい有料ユーザー u を作成し、保存しようとします。
何も起こりません。また、プロファイラーから、クエリが IsPaid 列をまったく使用していないことがわかります。誰でも助けることができますか?
entity-framework - Breeze は Table Per Hierarchy (TPH) で動作しますか?
BreezeJ を既存のデータ構造にプラグインしようとしていますが、メタデータのフェッチでエラーが発生します。CarBones サンプルに以下を追加することで、これを再現できます。
次に、コンテキストで
これはトリガーするのに十分です
Breeze でこのように TPH を使用することはできませんか? まだ?
entity-framework-5 - EF5とルックアップテーブルの設定に関する問題
次のようなTPHルックアップテーブルを使用してコードファーストモデルを設計しようとしています。
Entity Frameworkで、次のように識別子を使用してテーブルを生成する必要があります。
私のコンテキストOnModelCreatingオーバーライドでは、次のように定義しました。
これらのルックアップオブジェクトを次のように使用したいと思います。
コードファーストマイグレーションを作成できますが、データベースを更新しようとするとエラーが発生します
参照関係は、許可されていない循環参照になります。
これはON DELETE CASCADE
、SQLスクリプトが次のように生成するためであることがわかりました。
流暢なAPIに入れる必要があることを読みましたが.WillCascadeOnDelete(false)
、それを受け入れることができません。助けを期待して...
これらの関係でDELETECASCADEをオフにするにはどうすればよいですか。ルックアップ値を削除する機能は本当に必要ではありませんが、リポジトリに単純なコードインターフェイスが必要でした。
hibernate - あるサブクラスから別のサブクラスに変更するための最もスマートなアプローチ (識別子の値を更新する)
背景:次のクラスの永続性を実装しています。
class Person
abstract class ContactInfo
Email extends ContactInfo
SnailMail extends ContactInfo
各PersonはContactInfoオブジェクトへの参照を持っています。(また、ContactInfoオブジェクトは複数のPerson間で共有できます。)
私のユーザー インターフェイスでは、ユーザーが連絡先情報オブジェクトを編集できるようにする必要があります。(置き換えられる連絡先情報オブジェクトが複数のユーザーで共有されている場合は、それらすべてのユーザーの連絡先情報が更新されている必要があります。)
しかし、私が理解しているように、Hibernate は識別子列の更新を拒否するため、単純に新しいSnailMailオブジェクトを作成し、置き換えるEmailオブジェクトの主キー値を与えて保存しても機能しません。
質問:ユーザーがContactInfoオブジェクトをEmailからSnailMailに変更できるようにする最善の方法は何ですか?
(オブジェクトは「短命」です。これは Web アプリの一部であり、すべてのオブジェクトは要求ごとに HQL を介して再読み取りされるため、心配する切り離されたオブジェクトは実際にはありません。)
これまでの私の考え:古いオブジェクトを削除して、新しいオブジェクトを挿入できることに気付きました。これが好ましいアプローチである場合、(A) 古い主キー値を再利用するか (この場合、割り当てられたジェネレーターを使用する必要があります)、または (B) バックエンドに新しいオブジェクトの新しい ID を生成させます。個人の連絡先参照を更新して、新しいオブジェクトを指すようにしますか?
(B) が進むべき道である場合、HQL ステートメントを使用して参照の更新を行うことができますか、または影響を受けるすべての人物オブジェクトを「手動で」ロード/更新/保存する必要がありますか?
entity-framework - 複数のアセンブリを使用した Entity Framework 5.0 の継承
コードファーストのアプローチと、テーブルごとの階層で表されるビジネスオブジェクトの継承を使用して、Entity Framework 5.0 を使用しています。
次の構造にしたいと思います。
実行時に DbContext に初めてアクセスしようとすると、コンパイラは次のように InvalidOperationException をスローします。
抽象型 'CommonObjects.AbstractClass' にはマップされた子孫がないため、マップできません。モデルから「CommonObjects.AbstractClass」を削除するか、「CommonObjects.AbstractClass」から派生した 1 つ以上のタイプをモデルに追加してください。
このシナリオは可能ですか?はいの場合、何が間違っていますか?
事前にご回答いただきありがとうございます。
ベン
追加情報:
たぶん、もう少し具体的にする必要があります:
抽象的なビジネス オブジェクト (抽象化のみ) を含む 1 つのアセンブリを取得しました。具体的な実装 (ロジックを含む) は、そのロジックがそのアセンブリ内の他のクラスに依存するため、責任のあるアセンブリに保持されます。問題は、これらの具体的な実装を永続化レイヤーにも格納できるようにしたいということです。しかし、そのためには、マッピングを有効にするために EF がそれらの型を認識している必要がありました。しかし、永続化レイヤーをビジネスロジックレイヤーに依存させたくありません-抽象化のみです。
そのため、派生オブジェクトをビジネス オブジェクト レイヤーから直接 DbContext に追加しようとしました。
例:
しかし、その後、上記の例外がスローされています。これを達成するための適切な構造がわかりません。