2

我正在使用 EF codefirst 编写一些用于创建数据库的单元测试。在执行单元测试期间,该DBContext->OnModelCreating方法仅执行 1 次,然后为其余测试缓存模型。

我希望能够通过尝试设置 ModelCaching 属性来分别为每个单元测试执行“OnModelCreating”,如文档中指定的那样:

// Remarks:
//     Typically, this method is called only once when the first instance of a derived
//     context is created. The model for that context is then cached and is for all
//     further instances of the context in the app domain. This caching can be disabled
//     by setting the ModelCaching property on the given ModelBuidler, but note that
//     this can seriously degrade performance. More control over caching is provided
//     through use of the DbModelBuilder and DbContextFactory classes directly.
protected virtual void OnModelCreating(DbModelBuilder modelBuilder);

但是,此模型构建器上没有这样的属性“ModelCaching”

我还能如何禁用此模型缓存?测试一个接一个地运行良好,但是由于这种缓存,它们在连续运行时会失败。

更好地说,我怎样才能强制ApplicationDbContext -> OnModelCreating为每个测试单独运行?现在它只运行一次,当它第一次用于一堆单元测试时。

4

1 回答 1

0

好像这个属性已经没有了。您需要保留不同的数据库模型并为不同的连接初始化上下文。

这个答案对我有帮助。通过实现IDbModelCacheKeyProvider EF 可以根据不同的 CacheKey 为你缓存多个 DB 模型。

于 2019-01-21T06:22:09.790 回答