當我嘗試更新已從數據庫獲得的實體的相關實體時出現錯誤。爲了便於說明我有這方面的entites:EF核心 - 添加相關實體時出錯
class Car
{
int Id ..;
string Name ..;
virtual ICollection<TireCar> tires ...;
}
class TireCar
{
int Id ..;
int TireId ..;
int CarId..;
int Size..;
virtual TireBrand tire;
virtual Car car;
}
class TireBrand
{
int Id;
string Name ..;
}
所以,我想打個補丁的方法,讓我更新Car
數據,並且還添加,更新或刪除tires
。當我得到Car
實體時,發生問題,之後我添加一個Tire
。類似的東西:
void UpdateCar()
{
var car = carService.Get(...);
...
carService.AddTire(new TireCar{ CarId = car.Id, TireId = 1 });
...
}
我使用的是DI Repository模式,所以背景是一樣的。即拋出的錯誤是:
System.InvalidOperationException:實體類型「汽車」和「TireCar」之間的關聯已被切斷,但這種關係的外鍵不能設置爲null。如果從屬實體應該被刪除,則建立關係以使用級聯刪除。'
我想,工作兩件事情,但我覺得是不是解決辦法:
- 當我加入了輪胎後拿到車
- 當我拿到車,因爲沒有跟蹤
爲什麼會發生如果我正在更新另一個表?我能做些什麼來解決這個問題?
我不認爲這是問題所在。我發現了兩個「解決方案」,不會在相同的映射中產生錯誤。爲什麼在調用方法AddTire之後獲得汽車時創建了TireCar?或者爲什麼當我獲得汽車「AsNoTracking」時創建了TireCar? –
當您在添加輪胎後得到汽車時說它起作用,那麼您是否意味着當您再次提出查詢以取回汽車時?我猜你是用別人來取代一些汽車輪胎(這是我想到EF Core爲什麼要用'ClientSetNull'級聯的唯一原因,它會與'AsNoTracking'一起工作,因爲即使你取下汽車輪胎從'Car.tires'屬性中,如果查詢沒有跟蹤更改,則值不會設置爲null。將一些存儲庫代碼添加到您的問題中,以更清楚地說明錯誤的來源。 – jorgonor