实体框架核心 - 如何检查数据库是否存在?

时间:2015-11-25 08:08:32

标签: entity-framework-core

对于EF6,我可以通过以下方式检查数据库是否存在:

context.Database.Exists()

如何在EF Core中执行此操作?

3 个答案:

答案 0 :(得分:30)

我自己找到了解决方案:

(context.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()

适用于SqlServer的EF 7.0.0-rc1-final版本

<强>更新

Entity Framework Core 2.0:

(context.Database.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()

答案 1 :(得分:12)

更新 .Net Core 3.1

要检查数据库是否存在并且可以联系:

dbContext.Database.CanConnect()

答案 2 :(得分:0)

可能为时已晚,但是context.Database.EnsureCreated()呢?

VS编辑器中指向EnsureCreated()的工具提示说:

  

Ensures that the database for the context exists. If it exists, no action is taken...

还请注意,如果数据库不存在,则该方法返回true,否则返回false。另外,我检查此行为的EF Core版本是2.2.6。对于较新的版本,您可能需要再次检查。

HTH

注意事项:如果您依赖迁移,则应避免使用此方法,因为在创建数据库时不应用任何迁移。有关更多信息,您可能需要阅读以下内容:https://stackoverflow.com/a/50005558/1432407

NB(再次):如果您需要应用迁移,则可能需要注意context.Database.CanConnect()。如果测试失败(除了数据库存在,应该没有其他原因),则可以调用context.Database.Migrate(),以应用迁移。