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

时间:2012-06-11 12:36:40

标签: c# .net entity-framework

我正在使用.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) 从触发DB中的删除/插入;和
  • parent_id = destination.id触发了数据库中的更新。

子项目本身有子项目,所以不要认为我可以parent1.Remove(item)后跟parent2.Add(item)

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

2 个答案:

答案 0 :(得分:0)

在EF中,如果你的导航属性设置正确,那么它应该只是一个问题(显然这里是虚构的名字)

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

child.ParentObject = destinationParent;

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

答案 1 :(得分:0)

以下是自我跟踪实体的解决方案。

使用ObjectSet.Detach(YourObject)从一个对象集中分离对象。

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

如果您刚刚在应用程序中创建了Entity并且它尚未在DB(AddObject语句中使用),则应使用

Insert

有关详细信息,请参阅MSDN