實體框架核心 - 在內存提供程序必需字段中

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合法嗎? 是的,了解原因