簡體   English   中英

實體框架如何更新子表

[英]Entity Framework How to update child table

我繼承了一些數據庫表和實體框架,其中有以下表:

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中(沒有問題)。 現在,我想更改一個人的汽車並保存回數據庫。 我現在很忙。 我有:

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出現在數據庫中,但人員行未更改為指向新的Car。 有人可以告訴我怎么回事以及我應該如何更新嗎? 我是實體框架的新手。

順便說一句,我嘗試了其他組合,例如嘗試

person.CarId = car.Id.

這導致一個異常:

發生參照完整性約束沖突:定義參照約束的屬性值在關系中的主體對象和從屬對象之間不一致。

我似乎找不到一個簡單的例子來解決問題。

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

它也應該有所幫助。

我認為這是一篇有關EF中POCO的變更跟蹤的很好的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM