DbContext.Database.EnsureCreated()

0 entity-framework-core xunit2

我正在研究 packtpub 的实体框架核心食谱关于单元测试,有一个例子(我做了一些改变)

[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);
}
Run Code Online (Sandbox Code Playgroud)

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

Smi*_*mit 5

基于EnsureCreated 这里的文档

返回
System.Boolean
如果数据库已创建,则返回 True;如果数据库已存在,则返回 false。

在上面的测试中,假设不存在数据库,则第一次测试运行时EnsureCreated将创建数据库并通过测试。但对于任何后续运行,数据库已经存在,因此EnsureCreated返回 false。也许您想使用EnsureDeletedbeforeEnsureCreated来确保数据库已删除,以便您可以测试它的实际创建情况。