2011-06-30 51 views
2

我有一個對象,我將它稱爲事物,它與另一個對象具有多對一的關係,我將稱它爲Person。如何在不復制關聯Person的情況下使用DbContext添加Thing。事情有Person的一個外鍵叫PersonID。通過DbContext添加對象複製相關對象

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

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

我嘗試這樣做:

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

我也試着這樣做:

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}。目前發生的事情是,EF將在數據庫中創建另一個具有與ID = 1的人相同的屬性的人(當然,因爲它是PK,所以ID被增加)。 – OpticalDelusion

+1

整體情況很重要,因爲你所說的在一般情況下是不正確的。如果你只是設置了FK屬性並且保留導航屬性'null'(你有導航屬性,對嗎?),你不會得到重複的記錄。你有一個特殊的情況導致這種行爲,我只是要求更多的上下文來得知任何想法可能是什麼原因。 – Slauma

回答

3

不知道如果我理解正確的問題,但嘗試:

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

這告訴EF該實體是uncha因此不會嘗試保存它。