Entity Framework Update检查记录是否已更改

问题描述 投票:4回答:2

我正在使用EF更新数据库表。

这是在连接模式下的简单场景。

我得到要更新的行

var order = from o in Orders
        where o.ID = 1
        select o;

然后我将记录更新为:

order.FirstName = "First";
order.LastName = "Last";
context.SaveChanges();

效果很好。 EF检查该字段是否已更改,并且仅在其新值时才更新该字段。我已在SQL Server上启用CDC,以检查EF值是否保持不变是否不重写数据库。

现在,我想将此检查放入我的代码中以获取其他逻辑,即,我希望EF告诉我记录何时更新,何时不更新(因为该值未更改)。谁能告诉我有没有办法?

我不想手动检查每个字段,因为我有很多要比较的字段。

谢谢

entity-framework
2个回答
7
投票

[如果有人对此感兴趣,这就是我所做的。我创建了以下方法,以在保存更改之前检查是否有任何字段已更改。

private Dictionary<Type, bool> IsEntityModified()
    {
        Dictionary<Type, bool> entity = new Dictionary<Type, bool>();
        var items = _bentities.ObjectStateManager.GetObjectStateEntries(EntityState.Modified);
        foreach (ObjectStateEntry entry in items)
        {
            foreach (string propName in entry.GetModifiedProperties())
            {
                string oldsetterValue, newsetterValue = null;
                //Get orginal value 
                oldsetterValue = entry.OriginalValues[propName].ToString();
                //Get new value 
                newsetterValue = entry.CurrentValues[propName].ToString();

                if (oldsetterValue != newsetterValue)
                {
                    entity.Add(entry.Entity.GetType(), true);
                }
            }
        }
        return entity;
    }

0
投票

[我在寻找类似的东西(即使不是同一件事时,也遇到了这个问题/答案)。我最终使用了这种方法,对我来说似乎效果很好。

var order = from o in context.Orders
        where o.ID = 1
        select o;

order.FirstName = "First";
order.LastName = "Last";

if (context.Entry(order).State != EntityState.Unchanged)
{
    // order has changed ...
}

因此发布对我有用的内容,以防其他人来这里寻找相似的东西时有用。

© www.soinside.com 2019 - 2024. All rights reserved.