2013-10-09 129 views
0

我继承了一些数据库表和Entity Framework,我有如下表:实体框架如何更新子表

Table Person 
Id (Primary Key) 
Sex 
CarId (Foreign Key) 

Table Car 
Id (Primary Key) 
Color 
ManufacturerId (Foreign Key) 

Table Manufacturer 
Id (Primary Key) 
Name 

我使用实体框架的工作将数据拉入波苏斯(没有问题)。现在,我想改变一个人的汽车并保存到数据库。我有一段时间这样做。 我:

Car car= new Car { Color = "gray", Manufacturer = manufacturer}; 
_dbContext.Cars.Add(car); 
_dbContext.SaveChanges(); 
person.Car = car; 
_dbContext.Entry(person).State = EntityState.Modified; 
_dbContext.SaveChanges(); 

没有异常抛出,新的汽车出现在数据库中,但人行不更改为指向新车。有人能告诉我发生了什么以及我应该如何更新?我是Entity Framework的新手。

顺便说一句,我试过其他组合,如试图

person.CarId = car.Id. 

这就导致了一个例外:

参照完整性约束冲突发生了:该属性定义参考 值约束在关系中的主体和从属对象之间不是一致的 。

我似乎无法找到一个简单的例子来清除事情。

回答

1

_dbContext.Entry(person).State = EntityState.Modified; 这告诉实体框架整个记录已被更新。

所以,你可以试试这个方法:

Car car= new Car { Color = "gray", Manufacturer = manufacturer}; 
_dbContext.Cars.Add(car); 
_dbContext.Person.Attach(person); 
person.Car = car; 
_dbContext.SaveChanges(); 

现在实体框架应该跟踪的列被更改。

,或者您可以拨打:

_dbContext.DetectChanges(); 
_dbContext.SaveChanges(); 

它应该帮助了。

I think this is very good article about Change Tracking with POCO in EF

+0

非常感谢Peter。你最后两行_dbContext.DetextChanges()和_dbContext.SaveChanges()为我解决了它。我没有意识到在代码中有一行:_dbContext.Configuration.AutoDetectChangesEnabled = false,我想解释为什么DetectChanges有帮助。标记为答案。 – Dave

+0

您使用的是哪个版本的Entity Framework?我的dbContext没有DetectChanges()方法。 –