更新实体后如何获取受影响列的数量?

时间:2016-02-01 13:04:39

标签: entity-framework

我正在尝试使用EF实现项目版本控制,我需要知道的是我实际调用的Update()实体是否实际上已更改,因此我可以增加其版本号。我如何获得这些信息?

我的存储库Update函数如下所示:

public virtual void Update(T entity)
{
  dbset.Attach(entity);
  dataContext.Entry(entity).State = EntityState.Modified;
}

2 个答案:

答案 0 :(得分:0)

您可以从实体状态获取信息。

如果某个属性已被更改,则状态将为"已修改"否则"未改变"。

using (var ctx = new TestContext())
{
    var first =  ctx.Entity_Basics.First();
    var x1 = ctx.IsModified(first); // false
    first.ColumnInt = 9999;
    var x2 = ctx.IsModified(first); // true
}

public static class Extensions
{
    public static bool IsModified <T>(this DbContext context, T entity) where T : class
    {
        return context.Entry(entity).State == EntityState.Modified;
    }
}

答案 1 :(得分:0)

我之前选择的是比较2的序列化版本:

public void UpdateProduct(Product product)
{
    var productInDb = GetByID(product.Id);
    if (!JToken.DeepEquals(JsonConvert.SerializeObject(product), JsonConvert.SerializeObject(productInDb)))
        product.CurrentVersion++;
    product = Update(product);
}