7

タイプごとのテーブルアプローチを適用するエンティティに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>
4

1 に答える 1

5

EDMX ファイルの Mapping セクションの AssociationMapping ノードを更新して、null を許可する条件を含めてみてください。

例えば

<AssociationSetMapping>
  ...
  <Condition ColumnName="" IsNull="false"/>
</AssociationSetMapping>
于 2008-12-03T12:45:20.663 に答える