对于EF6,我可以通过以下方式检查数据库是否存在:
context.Database.Exists()
如何在EF Core中执行此操作?
答案 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()
,以应用迁移。