【发布时间】:2016-02-27 22:28:39
【问题描述】:
对于EF6,我可以通过以下方式检查数据库是否存在:
context.Database.Exists()
如何在 EF Core 中执行此操作?
【问题讨论】:
对于EF6,我可以通过以下方式检查数据库是否存在:
context.Database.Exists()
如何在 EF Core 中执行此操作?
【问题讨论】:
我自己找到了解决办法:
(context.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()
它适用于 SqlServer 的 EF 7.0.0-rc1-final 版本
更新:
实体框架核心 2.0:
(context.Database.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()
【讨论】:
(context.Database.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()
using Microsoft.EntityFrameworkCore.Infrastructure;。 Intellisense 没有告诉我我需要做什么才能获得 GetService() 方法。
更新 .Net Core 3.1
检查数据库是否存在并且可以联系:
dbContext.Database.CanConnect()
【讨论】:
SqlException错误。
其他解决方案告诉您数据库是否可连接:
context.Database.GetService<IRelationalDatabaseCreator>().Exists(); //true
context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().Exists(); //true
我想知道数据库是否存在:
context.Database.GetService<IRelationalDatabaseCreator>().HasTables(); //true
context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().HasTables(); //false
注意这个奇怪的行为:
context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().HasTables(); //false
context.Database.EnsureCreated();
context.Database.GetService<IRelationalDatabaseCreator>().HasTables(); //true
context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().HasTables(); //true !!
所以它并不完美,但根据您的用例,它可能很有用。
【讨论】:
Exists() 在EnsureDeleted() 被调用后会为我返回false。