加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – EntityFramework核心:获取实体和相关数据中发生的更改

发布时间:2020-12-16 01:27:54 所属栏目:百科 来源:网络整理
导读:我想在实体和附加到它的相关数据中发生变化. 我知道如何获取一个实体中已更改的属性名称: dbContext.Entry(entity).Properties.Where(x = x.IsModified).Select(x = x.Metadata.Name).ToList(); 如何对导航属性中的相关数据执行相同操作? 解决方法 基于此
我想在实体和附加到它的相关数据中发生变化.

我知道如何获取一个实体中已更改的属性名称:

dbContext.Entry(entity).Properties.Where(x => x.IsModified).Select(x => x.Metadata.Name).ToList();

如何对导航属性中的相关数据执行相同操作?

解决方法

基于此 article (Entity Change Tracking using DbContext in Entity Framework 6),您应该重写SaveChanges()方法以跟踪实体更改及其相关实体.

public override int SaveChanges()
{
    return base.SaveChanges();
}

实际上,您应该将上面的代码更改为以下示例:

public override int SaveChanges()
{
    var modifiedEntities = ChangeTracker.Entries()
        .Where(p => p.State == EntityState.Modified).ToList();
    var now = DateTime.UtcNow;

    foreach (var change in modifiedEntities)
    {
        var entityName = change.Entity.GetType().Name;
        var primaryKey = GetPrimaryKeyValue(change);

        foreach(var prop in change.OriginalValues.PropertyNames)
        {
            var originalValue = change.OriginalValues[prop].ToString();
            var currentValue = change.CurrentValues[prop].ToString();
            if (originalValue != currentValue) //Only create a log if the value changes
            {
                //Create the Change Log
            }
        }
    }
    return base.SaveChanges();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读