子实体如何从一个父实体移动到另一个父实体
本文关键字:实体 一个 移动 另一个 | 更新日期: 2023-09-27 18:36:51
我正在使用 .Net 4 将应用程序从我的自定义 ORM 转换为实体框架。事情进展顺利,但我不确定如何将子项目移动到另一个父项目。我不确定我应该遵循什么模式。
使用 ORM,我生成了如下方法:
public void MoveTo_Item(Parent.Row destination)
{
_inMovement = true;
_parent_Item.Child_Items.Remove(this);
parent_id = destination.id;
destination.Child_Items.Add(this);
_inMovement = false;
}
哪里:
-
_inMovement == true
预防_parent_Item.Child_Items.Remove/Add(this)
触发数据库中的删除/插入;和 -
parent_id = destination.id
触发了数据库中的更新。
本身有子项,所以不要以为我只能做parent1.Remove(item)
后跟parent2.Add(item)
。
如何使用 EF .Net 4 正确更改父项?
在 EF 中,如果导航属性设置正确,则应该只是一个问题(显然,此处是虚构的名称)
Child child = sourceParent.Children.First(); // or whatever
child.ParentObject = destinationParent;
顺便说一句,如果您的自定义 ORM 每次操作对象时都会命中数据库(这一定是相当耗费资源的,不是吗?),您将需要调整到 EF 的工作方式,除非您明确说明,否则不会命中数据库。
以下是自我跟踪实体的解决方案。
使用 ObjectSet.Detach(YourObject)
将对象从一个对象集中分离。
有两个用于连接的功能。 如果对象是从数据库加载的,并且您希望 EF 为其使用 Update 语句,则应使用Attach
。 Attach
是需要用于分离实体的函数。
如果您刚刚在应用程序中创建了实体并且实体尚未在数据库中(Insert
要使用的语句),则应使用AddObject
。
有关更多详细信息,请参阅 MSDN