在具有预先加载的SaveChanges之后从DbEntityEntry重新加载实体

时间:2017-05-13 21:17:06

标签: performance entity-framework caching eager-loading

背景:使用EntityFramework 6我正在创建一个存储库,它在内存中保存所有实体,这是出于性能原因,所以我需要在SaveChange之后更新我的“存储库缓存”

public class Person
{
    public decimal Incomes{get; set;}
    public Dependent Related {get; set;} 
}
public class Dependent
{
   ...
}

这是我如何加载到内存静态字段

var x= _set.Include(d => d.Related)
                .ToList();
            _memCache.AddRange(x);

在SaveChanges之前我保留ChangeTrack的信息

private void BeforeCommit(DbChangeTracker tracker)
    {
        foreach (var track in tracker.Entries<Person>())
        {
            switch (track.State)
            {
                case EntityState.Added:
                    _toAdd.Add(track);
                    break;
                case EntityState.Deleted:
                    _toDelete.Add(track.Entity.Id);
                    break;
                case EntityState.Modified:
                    _toModify.Add(track);
                    break;
            }
        }
    }

这是我在重新加载DbEntityEntry后处理新实体的问题track.Entity的“Related”属性为null因为我找不到指定Include的方法(m =&gt; m.Related)式

foreach (var track in _toAdd)
{
    await track.ReloadAsync();
    _memCache.Add(track.Entity);
}

0 个答案:

没有答案