首页 > 解决方案 > EF ChangeTracker 访问被跟踪实体及其导航集合

问题描述

我想跟踪变化。我有一个班级/模特

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
         }
   }
}

但我不知道如何循环 MoreInfo 和 ICollection Works 并检查其参数?

标签: entity-frameworkentity-framework-coredbcontext

解决方案


根据 EF Core 术语,这些不是属性,而是导航,因此无法通过Properties. 使用Navigations属性获取引用和集合导航属性的条目(具有通用属性/方法)

foreach (var navEntry in e.Navigations)
{
    // e.MoreInfo, e.Works
    if (navEntry.IsModified)
    {
    }
}

ReferenceCollections获取相应的条目(具有特定的属性/方法)

foreach (var refEntry in e.References)
{
    // e.MoreInfo
    if (refEntry.IsModified)
    {
    }
}
foreach (var colEntry in e.Collections)
{
    // e.Works
    if (colEntry.IsModified)
    {
    }
}

但是属性导航都被认为是成员,因此您可以使用Members通用属性/方法来处理它们

foreach (var memberEntry in e.Members)
{
    // e.MoreInfo, e.Works, e.FirstName, e.LastName
    if (memberEntry.IsModified)
    {
    }
}

推荐阅读