【发布时间】:2020-09-18 23:17:33
【问题描述】:
我有一个项目,我需要记录已更改的“列”以及原始值和更改后的值。我有一个 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));
}
}
我希望只是在我的更改中看到“姓氏”。但是,我得到了一些奇怪的东西,比如 Birthdate(DateTime 值)、Id(int 值)等。奇怪的是这些条目的 orig 值和 curr 值完全相同——也就是说,我在更改中的条目表格如下:"Id",2,2。
我做错了什么还是有更可靠的方法来查找实体的哪些属性发生了变化?
【问题讨论】:
-
你试过检查
context.ChangeTracker.Entries()吗? -
我希望
_context.Entity(existing)是_context.Entry(existing)的拼写错误,而不是您原始代码的一部分。