[英]Persisting disconnected POCO entities
我正在处理断开的POCO对象。
当我保留单个对象时,它可以正常工作!
当我要保留相关对象时,问题就开始了。
例如:
从数据层检索对象:
using (MyContext ctx = new MyContext ())
{
return ctx.Users.First();
}
该对象返回到业务层,在那儿,我添加了一些子记录,请参见下文(仅用于说明):
objectUser.Permissions.Add(new Permission());
objectUser.Permissions.Add(new Permission());
权限是对用户权限的导航。
然后,我想将此objectUser保留回数据库,然后执行以下操作:
using (MyContext ctx = new MyContext ())
{
ctx.Users.Attach(objectUser);
ctx.ObjectStateManager.ChangeObjectState(objectUser, System.Data.EntityState.Modified);
ctx.SaveChanges();
}
但是在使用的第一行中,出现错误:“ ObjectStateManager中已经存在具有相同键的对象。ObjectStateManager无法跟踪具有相同键的多个对象”。
有人知道我做错了吗?
我只想保留对象及其相关对象。
谢谢你帮我
路易斯·古斯塔沃(Luiz Gustavo)
我试图分离实体,但是在这种情况下,我松开了所有相关的对象,并且需要这些相关的对象以便添加/删除。
之后,我想将它们持久化回数据库。
我在做一个愚蠢的架构吗?
路易斯·古斯塔沃(Luiz Gustavo)
这里的问题似乎是objectUser
对象仍然附加到用于从数据库检索它的上下文中。 如果需要在定义了两个不同上下文的情况下使用此工作流,则必须将objectUser
与初始上下文分离。 一种方法是关闭objectUser
上下文对象上的对象跟踪。 或者,您可以手动从上下文中分离对象。
using (MyContext ctx = new MyContext ())
{
//EF 4.1 - ctx.Configuration.AutoDetectChangesEnabled = false;
ctx.Users.MergeOption = MergeOption.NoTracking;
return ctx.Users.First();
}
博客: http : //blogs.msdn.com/b/dsimmons/archive/2010/01/12/ef-merge-options-and-compiled-queries.aspx
第1部分全部涉及MergeOption属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.