簡體   English   中英

如何判斷 EF Core 實體上的哪些屬性已更改?

[英]How to tell which properties have changed on an EF Core Entity?

我有一個項目,我需要記錄隨原始值和更改值一起更改的“列”。 我有一個 EF Core 實體,因此我嘗試執行以下操作作為測試:

var existing = _context.People.FirstOrDefault(p => p.Id == 5);
existing.Lastname += " III";

var changes = new List<Tuple<string,object,object>>();
var proplist = typeof(Person).GetProperties();
foreach(var prop in proplist)
{
   var orig = _context.Entry(existing).OriginalValues[prop.Name];
   var curr = _context.Entry(existing).CurrentValues[prop.Name];
   if(orig != curr){
     changes.Add(new Tuple<string,object,object>(prop.Name,orig,curr));
   }
} 

我希望在我的更改中看到“姓氏”出現。 但是,我得到了一些奇怪的東西,比如出生日期(DateTime 值)、Id(整數值)等。奇怪的部分是這些條目的 orig 值和 curr 值完全相同——也就是說,我在更改中的條目表看起來像: "Id",2,2

我做錯了什么還是有更可靠的方法來查找實體的哪些屬性發生了變化?

你可以試試這個——

var changes = new List<Tuple<string, object, object>>();
var entry = _context.Entry(existing);
foreach (var item in entry.CurrentValues.Properties)
{
    var propEnrty = entry.Property(item.Name);
    if (propEnrty.IsModified)
    {
        changes.Add(new Tuple<string, object, object>(item.Name, propEnrty.OriginalValue, propEnrty.CurrentValue));
    }
}

編輯 :
我剛剛運行了你的代碼,發現它沒有問題。 以下是我在changes列表中得到的內容 -

{(LastName, Cooper, Cooper III)}

但當然我使用_context.Entry(existing)希望_context.Entity(existing)在發布時是一個錯字,並不是你原始代碼的一部分。

暫無
暫無

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

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