我正在使用.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正确更改父项?
答案 0 :(得分:0)
在EF中,如果你的导航属性设置正确,那么它应该只是一个问题(显然这里是虚构的名字)
Child child = sourceParent.Children.First(); // or whatever
child.ParentObject = destinationParent;
顺便说一句,如果您的自定义ORM每次对象被操作时都会访问数据库(这一定是资源密集型的,不是吗?),您将需要调整为EF方式工作,除非您明确说明,否则数据库不会被命中。
答案 1 :(得分:0)
以下是自我跟踪实体的解决方案。
使用ObjectSet.Detach(YourObject)
从一个对象集中分离对象。
附件有两个功能。如果您的对象是从DB加载的,并且您希望EF为其使用Update语句,则应使用Attach
。 Attach
是您需要用于分离实体的函数。
AddObject
语句中使用),则应使用 Insert
。
有关详细信息,请参阅MSDN。