检测EntityFrameWork中的更改

时间:2012-04-27 16:05:16

标签: c#-4.0 entity-framework-4

在我当前的项目中,我需要在表中写入所有值在应用程序中更改。 防爆。该家伙更新UserName,我需要在表中放入UserName旧值“1”新值“2”。

我尝试使用ObjectStateEntry,但这会返回所有字段。我认为FW归还所有因为我的代码。

public USER Save(USER obj) 
        {
            using(TPPTEntities db = new TPPTEntities())
            {
                db.Connection.Open();
                USER o = (from n in db.USERs where n.ID == obj.ID select n).FirstOrDefault();
                if (o == null)
                {
                    o = new USER()
                    {
                        BruteForce = 0,
                        Email = obj.Email,
                        IsBlock = false,
                        LastLogin = DateTime.Now,
                        Name = obj.Name,
                        UserName = obj.UserName,
                        UserPassword = new byte[0],

                    };
                    db.AddToUSERs(o);
                }
                else
                {
                    o.Email = obj.Email;
                    o.Name = obj.Name;
                    o.UserName = obj.UserName;

                }
                db.SaveChanges();
                db.Connection.Close();
            }
            return obj;
        }

2 个答案:

答案 0 :(得分:1)

获取旧值和新值的方法是:

var ose = this.ObjectStateManager.GetObjectStateEntry(o.EntityKey);
foreach (string propName in ose.GetModifiedProperties())
{
    string.Format("Property '{0}', old value: {1}, new value: {2}",
        propName, ose.OriginalValues[propName], ose.CurrentValues[propName]);
}

当然,这是没用的,但我相信你会知道在foreach循环中要做什么来存储更改。

答案 1 :(得分:0)

这是WCF服务吗?在这种情况下,由于在对象上下文不可用的情况下对对象图进行了更改,因此更改可能永远不会发生。考虑使用自我跟踪实体