2017-08-30 10 views
0

私はデータベースを継承しており、EF6を使用してデータを挿入する必要があります。私はエラーを取得する:EF6:複数のエンティティが同じプライマリキーを持つ可能性があります

DbUpdateException: Unable to determine the principal end of the 'POSModel.FK_KitMemberTaxRaw_KitMemberSaleReturnRaw_KitMemberSaleReturnRowId' relationship. Multiple added entities may have the same primary key. 

私はDataContractSerializerを使用してPOCOオブジェクトにXMLをデシリアライズ。 XML文書の構造体からオブジェクト参照を使用して関係を定義しています。 POCOオブジェクトは、(!まったくデシリアライザウェルのいずれかで動作しません)NuGetパッケージから提供されたT4スクリプトを使用して生成され

私はそうのようなKitMemberTaxRawを飾られました:KitMemberTaxRawテーブル

[ForeignKey("KitMemberSaleReturnRaw")] 
public virtual KitMemberSaleReturnRaw KitMemberSaleReturnRaw { get; set; } 

[ForeignKey("KitMemberKitMemberSaleReturnRaw")] 
public virtual KitMemberKitMemberSaleReturnRaw KitMemberKitMemberSaleReturnRaw { get; set; } 

かもしれませんKitMemberKitMemberSaleReturnRawまたはKitMemberSaleReturnRawのいずれかのテーブルに結合することができます(両方ではありません)。

EFは「関係の主要な終わり」をどのように決定しますか?

+0

これらの属性は間違っています。あなたはそれらを使用するFK idにポイントします。 2つの関係に同じキーを使用することはできませんので、[TPH](https://weblogs.asp.net/manavi/inheritance-mapping-strategies-withentity-framework)を調べる必要があります。 -code-first-ctp5-part-1-table-per-hierarchy-tph) –

+0

は、外部キーの装飾をコレクションではなくidプロパティに移動しました。同じエラー。 2つの関係に同じキーを使用していません。税テーブルは、2つのテーブルの一方または他方に連結されています。コンボの多くの部分は、個別に課税対象となります(または課税対象外)。そのテーブルは階層レベルのいくつかのレベルで使用されます – Jay

+1

OK、おそらくあなたは[this](https://stackoverflow.com/questions/26783934/multiple-addedent-may-have-the-same-primary- key-on-database-seed)または[this](https://stackoverflow.com/questions/11893673/c-sharp-unable-to-determine-the-principal-end-of-the-relationship)を参照してください。それ以外の場合は、問題の原因となっているモデルとコマンドを確認する必要があります。 –

答えて

0

EF6と判明した問題は、親とオプションの祖父母へのリンクを持つテーブルを自動的に理解することができませんでした。マイクロソフトが提供するテンプレートによって生成されたナビゲーションプロパティは、正確ではありましたが、不十分でした。

問題を解決するために、私は手作業で一時的な主キーを作成しましたが、理解できませんでした。

注:私が使用したDataContractSerializerクラスは、POCOオブジェクトを作成して、インスタンス化されたナビゲーションプロパティの配列を作成します。私はICollection <の代わりにIList <>プロパティを生成するためにテンプレートを変更しなければなりませんでした。実行時には、配列のサイズを動的に変更できないため、エラーが発生しました。

関連する問題