缓存实体会导致不需要的插入



如果我缓存整个表:

static List<Table1> table1Cache = context.Table1.ToList();

然后我用它来关联:

var context = new Context();
var t2 = new Table2();
t2.MyTable1Reference = table1Cache.Single(x=>x.Id == paramIntId);
context.SaveChanges();

由于第三行,将在表 1 中插入一个新行。EF 认为这是一个新实体。我知道我可以做一些事情,比如在创建 de 上下文时总是附加缓存(每个请求我有 1 个上下文),或者使用 MyTable1ReferenceID = table1Cache.Single(x=>x.Id == paramIntId)。同上;

但它不安全,我有时会忘记,有一个好的解决方案吗?

是的,这是有道理的,因为实体当前未与当前上下文关联。 因此,EF 认为它是暂时的,并保存了一个新实例。

如果要跨上下文缓存,则不希望存储对象本身。 这与上下文有关。 相反,您希望将数据存储在缓存中。 基本上序列化和反序列化实体。您还需要在当前上下文时关联实体,以便下次从缓存中检索实体时,可以将更改保存到缓存和数据库。

如果这一切听起来很多,那就是。 保持 2 个数据存储同步并不是一个容易解决的问题。我会看一下NHibernate的第二级缓存的实现。

最新更新