Entity framework core 实体框架核心-内存中提供程序必填字段

Entity framework core 实体框架核心-内存中提供程序必填字段,entity-framework-core,effort,Entity Framework Core,Effort,在EntityFramework的早期版本中,我一直在使用Effort()进行单元测试。我决定为EF Core提供新的内存中提供程序,并很快发现它不支持在OnModelCreating中设置的IsRequired()和其他实体配置。有没有办法让它尊重这种配置?如果没有,这是否在待办事项清单上?甚至可能是另一种内存提供程序 我希望能够使用测试步骤交换上下文,并在一些可以利用相同代码的集成测试场景中使用真正的db。这似乎是一个“很好的拥有”,也许这是一个与EF核心的努力情况。我也找不到任何关于EF

在EntityFramework的早期版本中,我一直在使用Effort()进行单元测试。我决定为EF Core提供新的内存中提供程序,并很快发现它不支持在OnModelCreating中设置的IsRequired()和其他实体配置。有没有办法让它尊重这种配置?如果没有,这是否在待办事项清单上?甚至可能是另一种内存提供程序

我希望能够使用测试步骤交换上下文,并在一些可以利用相同代码的集成测试场景中使用真正的db。这似乎是一个“很好的拥有”,也许这是一个与EF核心的努力情况。我也找不到任何关于EF Core的工作


我在EF()的Uservoice页面上找不到任何内容,如果它不可用,我将下一步转到那里。

这个问题很久以前被问过,但我有同样的问题,并且偶然发现了这个未回答的问题。我最终找到了一个适合我的答案,所以我想我会分享一下,以防其他人像我一样遇到这个问题

SQLite似乎有一个内存中选项,它的作用更像一个真实的数据库,而不是标准的UseInMemory()选项:

唯一的区别是我添加了Microsoft.EntityFrameworkCore.Sqlite,而不是像文档中说的那样添加了Microsoft.Data.Sqlite

与问题不完全相关,但在我的特殊情况下,我希望在测试我正在开发的webapi的基本功能时使用内存中的,但我仍然希望能够测试唯一约束等。下面是我为实现内存中数据库添加的内容

在配置服务中:
services.AddDbContext(选项=>
{
var liteConn=newsqliteconnection(“数据源=:内存:”);
liteConn.Open();
选择权
.UseSqlite(liteConn)
.ConfigureWarnings(警告=>
{
warnings.Throw(RelationalEventId.QueryClientEvaluationWarning);
warnings.Log(RelationalEventId.ExecutedCommand);
});
});
在配置中:
if(env.IsDevelopment())
{
var context=app.ApplicationServices.GetRequiredService();
context.Database.recreated();
}

我对IsRequired()的荣誉感也有同样的问题。你是不是找到了解决这个问题的办法,还是有计划的解决办法?您可能会认为,几乎任何强加给modelBuilder的要求都应该是上下文的约束,而不管db的类型如何。
services.AddDbContext<MyDbContext>(options =>
{
    var liteConn = new SqliteConnection("DataSource=:memory:");
    liteConn.Open();

    options
        .UseSqlite(liteConn)
        .ConfigureWarnings(warnings =>
        {
            warnings.Throw(RelationalEventId.QueryClientEvaluationWarning);
            warnings.Log(RelationalEventId.ExecutedCommand);
        });
});
if (env.IsDevelopment())
{
    var context = app.ApplicationServices.GetRequiredService<MyDbContext>();
    context.Database.EnsureCreated();
}