Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF ChangeTracker访问被跟踪实体及其导航集合_Entity Framework_Entity Framework Core_Dbcontext - Fatal编程技术网

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,有没有想法如何在引用条目和集合中修改字段时获得正确的结果?你能帮我举一个我可以测试的例子吗,你的例子总是显示错误?谢谢