タイプごとのテーブルアプローチを適用するエンティティにLinqを使用しています。これは非常にうまくいっています。私は次の設定をしています:
- 親テーブル
- 子テーブル (親から継承)
- グランド子テーブル (子テーブルから継承)
- リンク テーブル (null 可能な外部キーを持ち、子テーブルへ)
これがデータベース図です
上記のビデオに続いて、上記のテーブルをモデルに追加するときに、エンティティへの Linq が作成する既定のスキーマに、タイプごとのテーブル アプローチを適用しました。
タイプごとのテーブルを適用する前に:
タイプごとのテーブルの後:
次に、プロジェクトをコンパイルしたところ、上の画像で確認できるエラーが発生しました。これを修正するために、外部キーリンクのマッピングに行き、エラーメッセージがうめき声を上げていたchildidフィールドを追加しました。
次に再コンパイルすると、別のエラーが発生します。
行 147、176 から始まるフラグメントのマッピングの問題: 異なるキーを持つ 2 つのエンティティが同じ行にマッピングされています。これらの 2 つのマッピング フラグメントが、重複するキーを持つエンティティの 2 つのグループを同じ行のグループにマップしないようにします。
これが私が今いるポイントです。問題は、「LinkingTable」の「ChildID」が Nullable であるようです。Not nullable に設定すると、上記のエラーは発生しません。
上記の手順で使用したデータベースとプロジェクトをスカイ ドライブに保存しました。
このエラーを修正する方法を知っている人はいますか?
デイブ
これが修正されたコードです (The Gecko に感謝)
前
<AssociationSetMapping Name="FK_LinkingTable_Child"
TypeName="TablePerTypeModel.FK_LinkingTable_Child"
StoreEntitySet="LinkingTable">
<EndProperty Name="Child">
<ScalarProperty Name="Id" ColumnName="ChildID" />
</EndProperty>
<EndProperty Name="LinkingTable">
<ScalarProperty Name="LinkTableID" ColumnName="LinkTableID" />
</EndProperty>
</AssociationSetMapping>
後
<AssociationSetMapping Name="FK_LinkingTable_Child"
TypeName="TablePerTypeModel.FK_LinkingTable_Child"
StoreEntitySet="LinkingTable">
<EndProperty Name="Child">
<ScalarProperty Name="Id" ColumnName="ChildID" />
</EndProperty>
<EndProperty Name="LinkingTable">
<ScalarProperty Name="LinkTableID" ColumnName="LinkTableID" />
</EndProperty>
<Condition ColumnName="ChildID" IsNull="false"/>
</AssociationSetMapping>