簡體   English   中英

EntityFramework核心:獲取實體和相關數據中發生的更改

[英]EntityFramework Core: Get changes occured in entity and related data

我想在實體和附加到它的相關數據中發生變化。

我知道如何獲取一個實體中已更改的屬性名稱:

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

如何對導航屬性中的相關數據執行相同操作?

基於本文(使用實體框架6中的DbContext進行實體更改跟蹤) ,您應該重寫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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM