問題タブ [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.
entity-framework - 複数の抽象継承を持つ Entity Framework TPH
Entity Framework(VS 2008 sp1、3.5)で階層モデルごとのテーブルを実行しようとしています。
私のモデルのほとんどは非常に単純で、複数のサブタイプを継承する抽象型です。
しかし、私はこの最新の課題に苦労しています。PARTIES(abstract) から継承する必要がある PERSONS(abstract) から継承したい STUDENTS があります。
これを行うたびに、「エラー 2078: EntityType 'Model.PERSONS' は Abstract であり、IsTypeOf を使用してのみマップできます。」というメッセージが表示されます。問題は、エンティティ セットで PARTIES が既に IsTypeOf として定義されていることだと思います。
それで、これは可能ですか?PERSONS abstract = false を作成し、偽の条件付きマッピングを割り当てることで、この問題を回避できます。しかし、これはばかげた回避策のようです。
entity-framework - TPH を使用した Entity Framework による多重継承
この質問に 加えて、複数の抽象継承 と VS.2008 sp1 .net 3.5 c#を使用する Entity Framework TPH
組織と学校を追加することにしました。Organization(abstract) は Party を継承し、School(concrete) は Organization を継承します。
エラーが発生します:
私は EF での旅行中に 3034 エラーをたくさん見てきました。ただし、通常はナビゲーション プロパティに関連しています。継承でこのようなエラーは見たことがありません。
ここに私のedmx xmlがあります:
.net - 階層ごとのテーブルと継承の実装の問題
.NET 4.0 Entity Framework を検討している開発時間を短縮するために、古い ASP アプリケーションを最新の .NET バージョンに移行しています。しかし、この問題で私たちの開発はレンガの壁にぶち当たったようです。
与えられたのは私たちのデータベースの小さな部分です: 車とそれぞれのプロパティのリストを含むテーブル OBJECT です。OBJECT 内の特定の車について、OPTIONS、ACCESSORIES、および STANDARD EQUIPMENT のリストを含むテーブル OBJECT_OPTIONS もあります。これら 3 つのタイプはすべて同じフィールドを持っているため、同じテーブルに格納されます。列 ncopt_type は、異なるリストを区別するために使用されます。可能な値は次のとおりです。「opt」、「acc」、および「sta」。テーブル OBJECT_OPTIONS は、テーブル OBJECT 内の一意の車 (obj_id) を表す ncopt_obj_id を介して OBJECT にリンクします。
私たちの目標は、異なる OBJECT_OPTIONS リストにリンクする 3 つのプロパティを OBJECT エンティティに提供することです。 - プロパティ OPTIONS - プロパティ ACCESSORIES - プロパティ STANDARDEQUIPMENT
継承モデルによる階層ごとのテーブルに関するさまざまなチュートリアルとウォークスルーを試しましたが、構築可能なモデルを作成することに成功していません。
技術的には、次のことを行いました。
- エンティティ OBJECT の作成
- エンティティ OBJECT_OPTIONS を作成し、抽象化します
- ベースタイプ OBJECT_OPTIONS を使用してエンティティ OPTION、ACCESSORY、および STANDARD_EQUIP をすべて追加します
- ncopt_type = '...' で 3 つのテーブルすべてに条件を追加します。
- OBJECT に 3 つのナビゲーション プロパティを追加し、すべて継承されたエンティティの 1 つにリンクします: OPTIONS、ACCESSORIES、STANDAARD_EQUIPMENT
このセットアップ中に一連のエラーが表示されますが、最終的には次のエラーになります。
エラー 3032: 行 250、286 で始まるフラグメントのマッピングの問題:EntityTypes NCO.Model.OPTION、NCO.Model.ACCESSOIRE、NCO.Model.STANDAARD_EQUIP がテーブル OBJECT_OPTIES の同じ行にマップされています。マッピング条件を使用して、これらのタイプがマップされる行を区別できます。
ただし、3 つのオブジェクトすべてに条件が存在します。
私はこの問題の解決策を見つけられず、すでに多くの時間を費やしてきました。現在、回避策を使用していますが、プロジェクトの終了までにこの状況がさらに数回発生するため、これを修正したいと考えています。
さらに詳しい情報が必要な場合は、コメントまたはメールをお送りください。
nhibernate - 他の継承を返すプロパティで継承をマップする方法は?
抽象クラス Vehicle と、Car と ForkLift から派生する 2 つのクラスがあります。
およびエンジン クラス:
エンジンは「クラス階層ごとのテーブル」でマッピングされます。Vehicles でも同じパターンを使いたいです。
Engine クラスをマップし、その Engine プロパティで派生させる方法は?
遅延読み込みでそれを行う方法は?
java - Hibernate データベースの移行に DiscriminatorFormula を使用するのは悪い習慣ですか?
データの永続化に Hibernate を使用し、Spring を (適切な測定のために) 使用するアプリケーションがあります。最近まで、アプリケーションには 1 つの永続クラス A がありました。
それ以来、B と呼ばれる A のサブクラスを追加しました。
B を追加した後、A をロードできなくなりました。次の例外がスローされました:
Bに以下のアノテーションとプロパティを追加したところ、問題が解決したようです。これは問題を解決する正しい方法ですか?
entity-framework - 階層エラー 3034 ごとの Entity Framework テーブル
階層ごとにテーブルを使用する Entity Framework モデルがあります。基本クラスは抽象クラスで、2 つの派生クラスがあります。
これら 2 つの派生クラスと別のクラスの間の関連付けを作成したいと考えています。これらは多対多の関係であるため、結合テーブルを通過します。
最初の関連付けを追加しても問題ありませんが、2 番目の関連付けを追加すると、次のエラーが発生します。
エラー 3034: 行 1074、1082 から始まるフラグメントのマッピングの問題: キーが異なる可能性のある 2 つのエンティティが同じ行にマップされています。これら 2 つのマッピング フラグメントが、AssociationSet の両端を対応する列にマップしていることを確認します。
モデルの関連部分の画像を次に示します (LabelImages と PresetImages の関連付けが問題を引き起こしています)。
nhibernate - サブクラスにnull不可のフィールドがある場合の階層ごとのテーブルマッピング?
抽象基本クラスと 4 ~ 5 個のサブクラスを含むクラス階層があります。NHibernate の table-per-class-hierarchy マッピング メソッドを使用して、これらを単一のデータベース テーブルにマップし、クエリが生成する結合の数を減らしたいと考えています。
ただし、これらのサブクラスの 1 つには、他のサブクラスにはない非 null プロパティがあります。これは、これらの他のサブタイプのいずれかのエンティティを保存しようとすると、欠落しているフィールドを null にすることはできないという SQL エラーが発生することを意味します。
これは、table-per-hierarchy が単に私のドメイン モデルと互換性がないということですか、それとも他に何かする必要があるのでしょうか?
.net - Entity Framework 4 - 継承
EF4 の継承マッピングを理解しようとしています。
私のデータベースには、次の構造を持つ 2 つのテーブルがあります。
PersonCategory テーブル:
- CategoryID (int) (ID) (PK)
- カテゴリ タイプ (nvarchar(50))
人物表
- PersonID (int) (ID) (PK)
- CategoryID (PersonCategory テーブルの外部キー)
- 名前 (nvarchar(50))
- 説明 (nvarchar(max))
PersonCategory テーブルには、それぞれカテゴリを表す 4 つのエントリがあります - Student、CourseInstructor、Staff、および Advisor。
オンラインで記事を読んだ結果、 Table Per Hierarchyがこのシナリオに適したモデルになると思いました。そのため、EF4 では、それぞれ Person テーブルから継承する 4 つのエンティティ (Student、CourseInstructor、Staff、および Advisor) を作成しました。次に、それぞれを Person テーブルにマップし、それぞれに条件を追加して (たとえば、Student エンティティの場合は CategoryID = 1、Staff エンティティの場合は CategoryID = 2)、他と区別しました。また、Person テーブルから CategoryID プロパティを削除し、抽象クラスにしました。しかし、Person テーブルから CategoryId プロパティを削除したため、次のエラーが発生します。
エラー 3015: 行 101、108、114、120、126、133 で始まるフラグメントのマッピングの問題: テーブル Person (CategoryID) からテーブル PersonCategory (CategoryID) への外部キー制約 'FK_Person_PersonCategory':: マッピングが不十分です: 外部キーをマップする必要があります概念側で外部キー関連付けに参加している一部の AssociationSet または EntitySet に。
階層ごとのテーブルは、このシナリオに適したモデルですか? そうでない場合、EF4 でこのシナリオにどのようにアプローチすればよいですか?
c# - Entity Framework 4 階層ごとのテーブル - 子のナビゲーション プロパティを定義する方法は?
現在、テーブルごとのタイプ (TPT) を使用して Entity Framework 4.0 モデルを配置していますが、いくつかのパフォーマンスの問題 (多くの LOJ/CASE ステートメント) と、2 つの特定のドメイン領域間の問題のマッピング (多対多) があります。たくさんの)。
TPHを試してみることにしました。
私は「Location」という抽象的エンティティと、他のすべてのエンティティのベースとなるエンティティを持っています。
次に、「Country」、「City」、「State」、「Street」などをすべて Location から派生させます。
「LocationType」は識別子です。
その部分は正常に機能していますが、派生型のナビゲーション プロパティを定義しようとして問題が発生しています。
たとえば、「州」には単一の「国」があるため、これを実行できるはずです。
ただし、これには、"State" 派生エンティティの "Country" というナビゲーション プロパティが必要です。どうすればいいですか?データベースからモデルを生成すると、すべての FK が同じテーブル内のレコードを指している単一のテーブルがあります。
(注: これらの FK は DB で手動で作成しました)。
しかし、FK は " Location " エンティティのナビゲーションとして配置されているため、これらのナビゲーション プロパティを派生エンティティに移動するにはどうすればよいでしょうか? ナビゲーションをコピーして貼り付けることはできません。開始/終了の役割を定義できないため、「新しいナビゲーション プロパティを作成する」こともできません。
どうやってこれを行うのですか?
また、モデル ファーストで実行できるかどうか、または DB から開始し、モデルを修正してから DB を再生成する必要があるかどうかも、TPH では明確ではありません。TPH の子供のナビゲーションを定義する方法について、インターネット上で良い例をまだ見つけていません。
注: code-first を実行したくありません。私の現在のソリューションには、EDMX を使用した TPT と純粋な POCO があります。(可能であれば) ドメイン モデル/リポジトリに影響を与えず、EF モデル/データベースを更新することを望んでいます。
編集
まだ解決策はありませんが、モデルを最初に実行しようとしていて、[追加] -> [新しい関連付け] を実行しています。これにより、実際には、派生エンティティにナビゲーションを追加できます。しかし、「モデルからデータベースを生成」しようとすると、「Location_Street」、「Location_Country」などのテーブルを作成しようとします。最初にモデルを作成できないようです。
編集
これが私の現在のモデルです:
現在取得している検証エラー:
エラー 1 エラー 3002: 359 行目から始まるフラグメントのマッピングの問題: テーブルの場所のキー (Locations.LocationId) のランタイム違反の可能性: 列 (Locations.LocationId) は、概念側で EntitySet NeighbourhoodZipCode のプロパティ (NeighbourhoodZipCode.Neighbourhood.LocationId) にマップされますただし、それらは EntitySet のキー プロパティ (NeighbourhoodZipCode.Neighbourhood.LocationId、NeighbourhoodZipCode.ZipCode.LocationId) を形成しません。
私が現在どこにいるかに関する編集でこの質問を編集し続けると思っただけです。自己参照 FK を使用した TPH が可能であるかどうか疑問に思い始めています。
編集
だから私は上記のエラーを見つけました。これは、Neighbourhood-ZipCode 多対多の結合テーブルが欠落していたためです。
結合テーブルを追加して(そしてそれにナビをマッピングして)上記のエラーを解決しました。
しかし、今はこのエラーが発生しています:
エラー 3032: 行 373、382 で始まるフラグメントのマッピングに問題があります: 条件メンバー 'Locations.StateLocationId' に重複した条件値があります。
CSDL を見ると、「CountyState」の関連付けマッピングは次のとおりです (州には多くの郡があり、郡には 1 つの州があります)。
関連付けもこの状態であるため、Condition ColumnName="StateLocationId"
それは不平を言っていることです。ZipCodeState
しかし、私はそれを取得しません。すべてのエンティティの識別子は一意であり (トリプル チェック済み)、これは有効なシナリオだと思っていたでしょう。
- 郡には、StateLocationId (場所テーブル) で示される単一の州があります。
- ZipCode には、StateLocationId (Locations テーブル) で示される単一の State があります。
それはTPHでは有効ではありませんか?