2011-06-30 9 views
2

私はオブジェクトを持っています。それは、他のオブジェクトと多対1の関係を持つThingです。どのようにしてDbContextを使って関連するPersonを複製せずにThingを追加できますか? PersonにPersonIDと呼ばれる外部キーがあります。DbContextを介してオブジェクトを追加すると、関連するオブジェクトが複製されます

context.Things.Add(newThing); 
context.SaveChanges(); 

私もこれを実行しようとしました:

public class Thing 
{ 
    public long ID { get; set; } 
    public long PersonID { get; set; } 
} 

public class Person 
{ 
    public long ID { get; set; } 
} 

は、私はこれを試してみました

私が正しく質問を理解しますがしようとした場合
Person person = new Person() { ID = newThing.PersonID }; 
context.Persons.Attach(person); 
context.Things.Add(newThing); 
context.SaveChanges(); 
+0

'newThing'をどのように作成してそのプロパティを設定すると、質問に簡単に答えることができます。 – Slauma

+0

どうしたらいいですか?たとえば、Thing newThing = new Thing(){PersonID = 1}です。現在起こっていることは、ID = 1のPersonと同じプロパティを持つ別のPersonをデータベースに作成することです(もちろんIDはPKなので増分されます)。 – OpticalDelusion

+1

一般的なケースでは、あなたが言っていることは正しくないので、全体の文脈は重要です。 FKプロパティを設定してナビゲーションプロパティを 'null'のままにした場合(ナビゲーションプロパティを持っていますか?)、重複したレコードは取得されません。あなたはこのような行動を引き起こす特別な状況があります。私はちょうど理由が何であるかを知るために、より多くの文脈を求めています。 – Slauma

答えて

3

わからない:

context.Entry(Person).State = System.Data.EntityState.Unchanged; 

これはエンティティがアンカーであることをEFに伝えますそれを保存しようとはしません。

関連する問題