DbContext.Database.EnsureCreated()

DbContext.Database.EnsureCreated()

我正在研究 packtpub 的 entity framework 单元测试核心食谱,有一个例子(我做了一些修改)

[Fact]
public void CanCreateDatabase()
{
    var blogContext = new BlogContext(_builder.Options);

    var created = blogContext.Database.EnsureCreated();

    Assert.True(created);
}

[Fact]
public void CanRetrieveRecord()
{
    var blogContext = new BlogContext(_builder.Options);

    var blog1 = blogContext.Blogs.FirstOrDefault();

    Assert.Contains("Development", blog1.Name);
}

第一次测试失败,第二次通过。我很确定数据库已经创建,这就是为什么第二个测试通过,但为什么第一个测试失败?

基于 EnsureCreated here

的文档

Returns
System.Boolean
True if the database is created, false if it already existed.

在上述测试中,假设不存在数据库,对于第一个测试 运行,EnsureCreated 将创建数据库并通过测试。但是对于任何后续 运行,数据库已经存在,因此 EnsureCreated returns 错误。也许您想在 EnsureCreated 之前使用 EnsureDeleted 以确保删除数据库,以便您可以测试其实际创建情况。