实体框架核心选择不读取其他进程的写入

时间:2019-07-17 16:16:30

标签: c# entity-framework-core

我有以下从依赖注入获得DbContext的类:

public DA(CustomDbContext db){
    this.db=db;
}

public void AddEntry(Entry entry){
    db.Entries.Add(entry);
    db.SaveChanges();   
}

public Entry SelectEntry(int id){
    return db.Entries.First(e=>e.Id==id);
}

该类通过依赖项注入AddTransient注册。问题是当我执行以下操作时:

var entry=new Entry{Stuff="stuff"};
da.AddEntry(entry);
await Task.Delay(2000);
var entryWithRecentChanges=da.SelectEntry(entry.Id);

我没有得到其他进程写入该条目的更改。我知道SaveChanges创建了一个新事务,但是我认为该事务仅持续了该调用。据我所知,另一个过程不使用事务。如何强制Entity Framework获取该条目的最新数据?我正在使用Entity Framework Core和SQL Server。

1 个答案:

答案 0 :(得分:1)

使用AsNoTracking解决了该问题:

public Entry SelectEntry(int id){
    return db.Entries.AsNoTracking().First(e=>e.Id==id);
}