Entity framework EF ChangeTracker访问被跟踪实体及其导航集合
我想跟踪变化。我有一个班级/模型Entity framework EF ChangeTracker访问被跟踪实体及其导航集合,entity-framework,entity-framework-core,dbcontext,Entity Framework,Entity Framework Core,Dbcontext,我想跟踪变化。我有一个班级/模型 public class Emp { public MoreInfo MoreInfo { get; set; } public ICollection<Works> Works { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } foreach (var e in _db.Ch
public class Emp
{
public MoreInfo MoreInfo { get; set; }
public ICollection<Works> Works { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
foreach (var e in _db.ChangeTracker.Entries<TEntity>())
{
foreach (var key in e.Properties)
{
if (key.IsModified)
{
//I can get the FirstName, LastName fields
}
}
}
公共级电磁脉冲
{
public MoreInfo MoreInfo{get;set;}
公共ICollection工作{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
foreach(变量e在_db.ChangeTracker.Entries()中)
{
foreach(e.Properties中的var键)
{
如果(关键字已修改)
{
//我可以得到FirstName和LastName字段
}
}
}
但我不知道如何循环MoreInfo和ICollection并检查其参数?根据EF核心术语,这些不是属性,而是导航,因此无法通过
属性访问它们。使用属性获取引用和集合导航属性的条目(具有公共属性/方法)
foreach (var navEntry in e.Navigations)
{
// e.MoreInfo, e.Works
if (navEntry.IsModified)
{
}
}
或和以获取相应的条目(具有特定属性/方法)
但是属性和导航都被视为成员,因此您可以使用来使用公共属性/方法处理它们
foreach (var refEntry in e.References)
{
// e.MoreInfo
if (refEntry.IsModified)
{
}
}
foreach (var colEntry in e.Collections)
{
// e.Works
if (colEntry.IsModified)
{
}
}
foreach (var memberEntry in e.Members)
{
// e.MoreInfo, e.Works, e.FirstName, e.LastName
if (memberEntry.IsModified)
{
}
}
感谢您的回复,我已经厌倦了在检查IsModified>时使用foreach(…e.References),它设置为always false。我的模型MoreInfo有一个字段地址,我在调试参考条目>当前值>包含新值的地址中看到。在哪里可以看到原始值地址?对于e.Properties,我看到key.OriginalValue和key.CurrentValue,是否有类似于原始值和当前值的内容?IsModified
对于不同的成员类型有不同的含义,这在相应的类文档中进行了解释。对于参考资料,您应该查看类。例如,允许您访问相关的实体数据。从那里您可以访问其属性、引用和集合,就像您使用“main”条目一样。但这是一个不同的故事(和问题)。好吧,要访问属性,正如您所提到的,这是一个不同的故事,但是IsModified怎么办,它总是显示false,有没有想法如何在引用条目和集合中修改字段时获得正确的结果?你能帮我举一个我可以测试的例子吗,你的例子总是显示错误?谢谢