C# 子实体如何从一个父实体移动到另一个父实体?

C# 子实体如何从一个父实体移动到另一个父实体?,c#,.net,entity-framework,C#,.net,Entity Framework,我正在使用.NET4将一个应用程序从自定义ORM转换为实体框架。事情进展得很顺利,但我不确定如何将子项移动到另一个父项。我不确定我应该遵循什么样的模式 使用ORM,我生成了如下方法: public void MoveTo_Item(Parent.Row destination) { _inMovement = true; _parent_Item.Child_Items.Remove(this); parent_id = destination.id; desti

我正在使用.NET4将一个应用程序从自定义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已阻止\u父项\u子项\u项。移除/Addthis 在数据库中触发删除/插入;和 parent_id=destination.id触发了数据库中的更新。 子项本身有子项,所以不要认为我可以只执行parent1.removietem,然后执行parent2.Additem


如何使用EF.Net 4正确更改父项?

在EF中,如果您的导航属性设置正确,那么很显然,这应该只是一个虚构名称的问题

Child child = sourceParent.Children.First();  // or whatever

child.ParentObject = destinationParent;

顺便说一句,如果您的自定义ORM在每次操作对象时都会命中数据库,这一定是资源密集型的,不是吗?您需要调整EF的工作方式,除非您明确表示,否则不会命中数据库。

在EF中,如果您的导航属性设置正确,显然,这应该只是一个虚构的名字的问题

Child child = sourceParent.Children.First();  // or whatever

child.ParentObject = destinationParent;

顺便说一句,如果您的自定义ORM每次操作对象时都会命中数据库,这一定是资源密集型的,不是吗?您需要调整EF的工作方式,除非您明确表示,否则不会命中数据库。

下面是自跟踪实体的解决方案

使用ObjectSet.DetachYourObject从一个对象集中分离对象

附件有两个功能。如果您的对象是从DB加载的,并且您希望EF对其使用Update语句,则应使用Attach。附加是需要用于分离实体的函数

若您刚刚在应用程序中创建了实体,但尚未在要使用的DB Insert语句中创建实体,则应使用AddObject


有关更多详细信息,请参阅。

下面是自跟踪实体的解决方案

使用ObjectSet.DetachYourObject从一个对象集中分离对象

附件有两个功能。如果您的对象是从DB加载的,并且您希望EF对其使用Update语句,则应使用Attach。附加是需要用于分离实体的函数

若您刚刚在应用程序中创建了实体,但尚未在要使用的DB Insert语句中创建实体,则应使用AddObject

有关更多详细信息,请参阅