Entity Framework Core - How to check if database exists?
The other solutions tell you whether the database is connectable:
context.Database.GetService<IRelationalDatabaseCreator>().Exists(); //true
context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().Exists(); //true
I want to know whether the database exists:
context.Database.GetService<IRelationalDatabaseCreator>().HasTables(); //true
context.Database.EnsureDeleted();
context.Database.GetService<IRelationalDatabaseCreator>().HasTables(); //false
Note this weird behavior:
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 !!
So it's not perfect, but depending on your use case it could be useful.
I have found the solution on my own:
(context.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()
It works for EF 7.0.0-rc1-final version for SqlServer
UPDATE:
Entity Framework Core 2.0:
(context.Database.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()
UPDATE .Net Core 3.1
To check if a database exists and can be contacted:
dbContext.Database.CanConnect()