实体框架核心 - 在内存提供程序必需字段中

effort entity-framework-core

在先前版本的Entity Framework中,我一直在使用Effort( https://effort.codeplex.com/ )进行单元测试。我决定为EF Core提供新的内存提供程序,并很快发现它不支持在OnModelCreating中设置的IsRequired()和其他实体配置。有没有办法让它尊重这种配置?如果没有,这是否在todo列表中实现?甚至可能是内存提供商的另类选择?

我希望能够使用测试步骤来交换上下文,并在一些可以利用相同代码的集成测试场景中使用真正的数据库。这似乎是“很高兴”,也许这就是EF Core的努力。我找不到任何关于为EF Core工作的努力。

我在EF的Uservoice页面上找不到任何内容( https://data.uservoice.com/forums/72025-entity-framework-feature-suggestions ),如果它不可用,它将会在那里找到。

热门答案

很久以前就问了这个问题,但我遇到了同样的问题,偶然发现了这个悬而未决的问题。我最终找到了一个对我有用的答案,所以我想我会分享以防其他人像我一样碰到这个。

似乎SQLite有一个内存选项,它比标准的UseInMemory()选项更像真正的数据库: https ://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/sqlite

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

与问题不完全相关,但在我的特定情况下,我想在内存中使用内存,而我正在测试我正在研究的webapi的基本功能,但我仍然希望能够测试独特的约束等。是我为实现内存数据库而添加的内容。

在配置服务中:

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);
        });
});

在配置中:

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);
        });
});



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因