是否可以有一个在多个DbContext之间共享的InMemory数据库(ASP.NET Core)?似乎每个DbContext类型都保留自己的数据库,即使在UseInMemoryDatabase中指定了相同的数据库名称也是如此。
最佳答案
如今这是可能的,但是如果您使用不同的上下文类型,仅传递名称确实是不够的。我正在使用.net core 2.2,并且出现了完全相同的问题。我的代码现在如下所示:
我在类级别创建了一个这样的InMemoryDatabaseRoot对象
//using Microsoft.EntityFrameworkCore.Storage;
private static readonly InMemoryDatabaseRoot InMemoryDatabaseRoot = new InMemoryDatabaseRoot();
当我添加数据库上下文时,我传递了根实例services.AddDbContext<MyContext>(options =>
{
options.UseInMemoryDatabase("MyContext", InMemoryDatabaseRoot);
options.UseInternalServiceProvider(serviceProvider);
});
services.AddDbContext<MySecondContext>(options =>
{
options.UseInMemoryDatabase("MyContext", InMemoryDatabaseRoot);
options.UseInternalServiceProvider(serviceProvider);
});
我在这里的讨论中找到它:https://github.com/aspnet/EntityFrameworkCore/issues/9613#issuecomment-430722420