Как мне эмулировать базу данных в памяти только в течение времени выполнения? - PullRequest
0 голосов
/ 24 января 2019

Я хотел бы эмулировать операции с базой данных, используя DbContext и использовать EF для работы с моими моделями, но без реальной установленной базы данных. Возможно ли это (довольно легко) в .NET Core (версия 2.2, если это имеет какое-то значение)?

Я читал о AddXxxInMemory методах, но только в контексте Identity Server. В конце концов у меня будет постоянный источник данных, но иногда я хотел бы иметь фальшивый источник в памяти, заполнять его начальным числом, а не полагаться на устанавливаемую внешнюю БД.

Возможно ли это вообще? Мой поиск в Google привел к большей неразберихе и утонул в руководствах о том, как подключиться к SQL Server, и по какой-то странной причине также ссылки на IMDB.

1 Ответ

0 голосов
/ 24 января 2019

Entity Framework Core предоставляет базу данных в памяти. Изначально он предназначен для юнит-тестов, но может использоваться для других целей.

Полная документация доступна здесь: https://docs.microsoft.com/en-us/ef/core/providers/in-memory/

[TestMethod]
public void Add_writes_to_database()
{
    var options = new DbContextOptionsBuilder<BloggingContext>()
        .UseInMemoryDatabase(databaseName: "Add_writes_to_database")
        .Options;

    // Run the test against one instance of the context
    using (var context = new BloggingContext(options))
    {
        var service = new BlogService(context);
        service.Add("http://sample.com");
    }

    // Use a separate instance of the context to verify correct data was saved to database
    using (var context = new BloggingContext(options))
    {
        Assert.AreEqual(1, context.Blogs.Count());
        Assert.AreEqual("http://sample.com", context.Blogs.Single().Url);
    }
}
...