如何在内存中模拟仅在运行时持续存在的数据库?

时间:2019-01-23 21:38:50

标签: c# asp.net-core .net-core in-memory-database

我想使用 DbContext 模拟数据库操作,并使用EF对我的模型进行操作,但没有安装实际的数据库。 .NET Core(如果有任何区别,则为2.2版)是否可能(相当容易)?

我已经了解了 AddXxxInMemory 方法,但仅在Identity Server的上下文中。最终,我将拥有一个持久的数据源,但有时,我想在内存中创建一个伪造的数据源,用种子填充它,而不依赖于正在安装的外部数据库。

那有可能吗?我的谷歌搜索使大多数人困惑,并淹没在有关如何连接到SQL Server的指南中,并且出于某些奇怪的原因,还链接到了IMDB。

1 个答案:

答案 0 :(得分:3)

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