2011-06-30 35 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因此不会尝试保存它。