C# 在多层/多层环境中跟踪实体的原始值

C# 在多层/多层环境中跟踪实体的原始值,c#,entity-framework,entity-framework-4,entity-framework-4.1,C#,Entity Framework,Entity Framework 4,Entity Framework 4.1,引用--我试图提取EF中实体的原始值。但是ObjectStateManager.GetOBjectStateEntry提供实体的修改值。我错过了什么 我在多层环境中使用EF4.0(POCO实体) public bool Update(IMessage objMessage) { object ob = objMessage.GetMaster(); appSancAdvice _entity = ob as appSancAdvice;

引用--我试图提取EF中实体的原始值。但是ObjectStateManager.GetOBjectStateEntry提供实体的修改值。我错过了什么

我在多层环境中使用EF4.0(POCO实体)

    public bool Update(IMessage objMessage)
    {
        object ob = objMessage.GetMaster();
        appSancAdvice _entity = ob as appSancAdvice;

        using (var context = new BISEntities())
        {
            context.appSancAdvices.Attach(_entity);
            ObjectStateEntry objectState = context.ObjectStateManager.GetObjectStateEntry(_entity);
            objectState.ChangeState(System.Data.EntityState.Modified);

            // this is giving the modified value of _entity 
            var originalValues = context.ObjectStateManager.GetObjectStateEntry(_entity).OriginalValues["sancstatus_id"];

            int _i = context.SaveChanges();
            return (_i > 0) ? true : false;
        }
    }

上下文不知道原始值,因为您附加了实体。如果需要原始值,则必须从数据库中获取对象。当您从新连接的对象中获取
原始值时,EF不会自动执行此操作。

谢谢Gert!那么,如何在一个分部类中扩展实体,以添加一个相同实体类型的对象,该对象可以在需要时保存检索到的实体副本呢。它会影响性能吗?我不会那样做。它让你的班级做的事情是上下文的责任。保持类简单(单一责任)是OO设计的核心原则之一。如果您想经常比较/复制新旧值,请为其创建一个服务类。Gert!请你详细说明一下,怎么做?关于这种设计的简要概述。我没有足够的信息,但这也是一个新问题。我建议您提出一个新问题,并提供适当的信息,例如,您为什么要这样做(审核、撤销更改等?)以及何时/何地。我会看看我能做些什么。只是为了更新一下,我在网上找到了这篇有用的文章(但使用了自跟踪实体)。