2016-10-10 10 views
0

私はエンティティを以下している、最初のEFコードを使用しています:ReferentialConstraintの依存プロパティは、ストア生成カラムにマップされます。コラムTPTの継承における「ID」

enter image description here

を、私は、1対1または0の関係を作成するには、継承のためTPT方法を使用しています私はProductionInstructionを保存するには、次のコードを記述

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Order>() 
       .HasOptional(x => x.ProductionInstruction) 
       .WithRequired(x => x.Order); 
} 

::、次のコードを書いた

var pi = new ProductionInstruction(); 
/* set pi properties */ 
ctx.ProductionInstructions.Add(pi); 
ctx.SaveChanges(); 

ctx.SaveChanges()実行私はエラーを次取得:

がReferentialConstraintで依存プロパティは、ストア生成された列にマッピングされています。列: 'Id'。

私の2つのエンティティの間に1..0-1を実装する方法はありますか?上記のエラーはありませんか?

+0

'/ * set pi properties * /'に注文へのリンクがありますか?すべきだ。 –

答えて

3

エンティティフレームワークでは、必要なプリンシパルとの1対1のマッピングは、プリンシパルの外部キーでもある従属キーを与えることによって実装されます。従属は主キーから主キーをコピーします。

あなたの場合、EFはProductionInstruction.IdOrder.Idへの外部キーにしたいと考えています。その値は、それが属するOrderからコピーする必要があります。ただし、継承のため、はID列(ストア生成)であるため、コードで設定することはできません。

継承を削除する必要があるため、をストア生成されていないものとしてマップするか、マッピングを両側でオプションに変更します。後者はProductionInstructionに別の外部キーOrderを与えます。

+0

2番目のソリューションでは、 'modelBuilder.Entity () .HasOptional(x => x.ProductionInstruction) .WithOptionalPrincipal(x => x.Order)'を使用していますか? – Masoud

+0

はい、それです。 –

関連する問題