将子实体移动到新的父实体
将子实体从一个父实体移动到另一个父实体的最佳方法是什么? ObjectContext或DbContext中是否有一个允许我们完成此操作的方法?
public class Person { public int PersonId public ICollection Cars } public class Car { public int CarId public string Color }
编辑:我目前正在使用EF 4.0模型首先使用POCO模板。
我想说你想要完成的是在这个例子中改变汽车的拥有者 。 如果没有严重的弊端反对在Car
中添加对Person
的反向引用,我会选择以下内容:
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 } }
注意:受保护的setter将强制外部使用者调用ChangeOwner
方法。 由于POCO类的自动生成代理(假设您使用它们),EF将能够正确设置它。
编辑:如果没有可能向Person
添加后向引用,那么从域逻辑角度来看,您仍然有相同的目标。 你只想改变汽车的拥有者。 这样的操作涉及两个实体,所以我可能会在实体之外的某个地方放置一个方法(无论它应该放在一个设计良好的系统中):
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的实现,因为我认为它非常紧张。 我介绍了那些方法,因为添加和删除所有权可能会触发一些特定人“内部”的逻辑。
上述就是C#学习教程:将子实体移动到新的父实体分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/983683.html