2

我正在使用 .Net 4 将应用程序从我的自定义 ORM 转换为 Entity Framework。一切进展顺利,但我不确定如何将子项移动到另一个父项。我不确定我应该遵循什么模式。

使用 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 正确更改父项?

4

2 回答 2

0

在 EF 中,如果您的导航属性设置正确,则应该很简单(显然,这里是虚构的名称)

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

child.ParentObject = destinationParent;

顺便说一句,如果您的自定义 ORM每次操作对象时都会访问数据库(这一定是相当资源密集型的,不是吗?),您将需要适应 EF 的工作方式,其中数据库没有被命中除非你明确表示。

于 2012-06-11T14:19:24.097 回答
0

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

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

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

AddObject如果您刚刚在应用程序中创建了实体并且它还没有在数据库中(Insert要使用的语句),则应该使用它。

有关详细信息,请参阅MSDN 。

于 2012-06-11T14:51:27.833 回答