我继承了一些数据库表和实体框架,其中包含以下表格:
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.
这导致例外:
发生了参照完整性约束违规:属性 定义引用约束的值不一致 在关系中的主要和依赖对象之间。
我似乎无法找到一个简单的例子来清理。
答案 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