Ядро базовой платформы Entity Framework - Требуемое поле для подключения к памяти


Вопрос

В предыдущих версиях Entity Framework я использовал Effort ( https://effort.codeplex.com/ ) для модульных тестов. Я решил предоставить новый поставщик памяти для EF Core и быстро понял, что он не соблюдает IsRequired () и другие конфигурации объектов, установленные в OnModelCreating. Есть ли способ удостовериться в этой конфигурации? Если нет, то это в списке задач, который будет реализован? Может быть, даже альтернатива в памяти провайдера?

Я хотел бы иметь возможность использовать этапы тестирования для замены контекста и использования реального db в некоторых сценариях тестирования интеграции, которые могли бы использовать один и тот же код. Это похоже на «приятно иметь», и, возможно, это пример усилий с EF Core. Я ничего не мог найти об усилиях, которые работали над EF Core.

Я не смог найти что-либо на странице Uservoice для EF ( 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
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему