繁体   English   中英

保持断开连接的POCO实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM