如何模拟仅在运行时持续存在的内存中的数据库?
How do I emulate a database in memory only lasting during the runtime?
我想使用 DbContext 模拟数据库操作,并使用 EF 在我的模型上操作,但没有安装实际的数据库。 .NET Core(版本 2.2,如果它有任何区别)是否可能(相当容易)?
我读过 AddXxxInMemory 方法,但仅限于 Identity Server 的上下文。最终我会有一个持久的数据源,但有时,我想在内存中有一个伪造的数据源,用种子填充它而不依赖于安装的外部数据库。
这可能吗?我的谷歌搜索造成了大部分混乱,并淹没在关于如何连接到 SQL 服务器的指南中,并且出于某种奇怪的原因还链接到 IMDB。
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);
}
}
我想使用 DbContext 模拟数据库操作,并使用 EF 在我的模型上操作,但没有安装实际的数据库。 .NET Core(版本 2.2,如果它有任何区别)是否可能(相当容易)?
我读过 AddXxxInMemory 方法,但仅限于 Identity Server 的上下文。最终我会有一个持久的数据源,但有时,我想在内存中有一个伪造的数据源,用种子填充它而不依赖于安装的外部数据库。
这可能吗?我的谷歌搜索造成了大部分混乱,并淹没在关于如何连接到 SQL 服务器的指南中,并且出于某种奇怪的原因还链接到 IMDB。
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);
}
}