实体框架如何更新子表

时间:2013-10-09 16:54:41

标签: c# entity-framework sql-update entity

我继承了一些数据库表和实体框架,其中包含以下表格:

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

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

Table Manufacturer
Id (Primary Key)
Name

我正在使用实体框架工作将数据拉入POCO(没有问题)。现在,我想改变一个人的车并保存回DB。我有一点时间这样做。 我有:

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();

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

顺便说一下,我尝试了其他组合,例如尝试

person.CarId = car.Id.

这导致例外:

  

发生了参照完整性约束违规:属性   定义引用约束的值不一致   在关系中的主要和依赖对象之间。

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

1 个答案:

答案 0 :(得分: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