我想說你想完成的是在這個例子中改變車的車主。
public class Car
{
...
public virtual Person Owner { get; protected set; }
public void ChangeOwner(Person newOwner)
{
// perform validation and then
Owner = newOwner;
// maybe perform some further domain-specific logic
}
}
注意:如果有反對加在Car
一個反向引用Person
沒有嚴重的缺點我會喜歡的東西去保護二傳手是執行調用外部消費者ChangeOwner
方法。 EF將能夠正確設置它,這要歸功於POCO類的自動生成代理(假設您使用它們)。
編輯: 如果不可能添加對Person
的反向引用,則從域邏輯角度看,您仍然有相同的目標。你只是想換一輛車的車主。這樣的操作包括兩個entites的,所以我很可能某處放置實體(無論它應該被放置在一個精心設計的系統)之外的方法去:
public void ChangeCarOwner(Person originalOwner, Person newOwner, int carId)
{
Car car = originalOwner.RemoveCarOwnership(carId);
newOwner.AddCarOwnership(car);
}
public class Person
{
...
public Car RemoveCarOwnership(int carId)
{
Car car = this.Cars.Single(c => c.Id == carId);
this.Cars.Remove(car);
return car;
}
}
這僅僅是一個概念上的一段代碼和它肯定可以寫的更好(確保老主人實際上擁有汽車等),但我只想提出一個想法,我將如何處理它。我也忽略了AddCarOwnership
的實現,因爲我認爲它非常好。我介紹了這些方法,因爲增加和刪除所有權可能會在特定人員的「內部」引發更多邏輯。
非常依賴於你如何使用EF(例如代碼優先,模式優先等)......你使用POCO,代理等等。如果您使用模板生成的實體或代理,您應該能夠更改內存中的關係並保存。 – 2012-02-21 17:23:31
@JamesGaunt:謝謝James,我編輯了我的問題。 – madatanic 2012-02-21 17:25:38
您是否嘗試從一個集合中刪除並添加到另一個集合中? – usr 2012-02-21 17:51:53