gpt4 book ai didi

c# - 将子实体移动到新的父实体

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:49 24 4
gpt4 key购买 nike

将子实体从一个父实体移动到另一个父实体的最佳方法是什么?在 ObjectContext 或 DbContext 中是否有一个方法可以让我们完成这个?

public class Person
{
public int PersonId
public ICollection<Car> 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
}
}

注意: protected 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# - 将子实体移动到新的父实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9382005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com