附加到新上下文时,EF对象实体状态将移至“未更改”

时间:2012-04-13 07:01:43

标签: linq entity-framework save

我遇到了最奇怪的问题,我从EF获取了一个对象并将其传递给Business Logic进行操作,完成后我试图将对象保存回DB,当对象传递给以下内容时方法它的EntityState是Modified,但是一旦运行了附加的代码行,它就被设置为UnChanged,因此Save将不起作用。

有谁知道为什么EF会这样做?

    public void Save(IEntity entity)
    {
        using (var context = new eDocumentEntities())
        {
            using (var scope = new TransactionScope())
            {
                if (entity.Id != 0)
                    context.AttachTo(entity.EntitySet, entity);
                else
                    context.AddObject(entity.EntitySet, entity);
                context.SaveChanges();
                scope.Complete();
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

由于实体更改跟踪被封装在Context中,当实体与上下文分离时,实体自然会丢失状态和其他跟踪内容。

答案 1 :(得分:0)

好的,我在这里找到了问题的解决方案,但是我对解释更感兴趣,为什么EF这样做,看起来效率很高!?

http://geekswithblogs.net/michelotti/archive/2009/11/27/attaching-modified-entities-in-ef-4.aspx