我想说你想完成的是在这个例子中改变车的车主。
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