У меня есть код EF Первый DbContext, пользовательский инициализатор, который семени данных и статический класс bootstrap, который устанавливает инициализатор в части Application_Start для Global.asax.Код EF Сначала не инициализируется база данных
Инициализатором выглядит следующим образом:
public class DropCreateDatabaseWithSeedData : DropCreateDatabaseAlways<MyEntities>
{
protected override void Seed(MyEntities context)
{
context.Genders.Add(new Gender { Id = 1, Name = "Male", SortOrder = 1 });
context.Genders.Add(new Gender { Id = 2, Name = "Female", SortOrder = 2 });
context.Genders.Add(new Gender { Id = 3, Name = "Prefer not to say", SortOrder = 3 });
}
}
Бутстраповское статический класс выглядит следующим образом:
public static class Bootstrap
{
public static void InitialiseDataAccessLayer()
{
Database.SetInitializer(new DropCreateDatabaseWithSeedData());
var uow = new UnitOfWork();
uow.Context.Database.Initialize(force: true);
}
}
Global.asax Application_Start выглядит следующим образом:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
DataAccess.Infrastructure.Bootstrap.InitialiseDataAccessLayer();
}
Все выглядит так, как это должно , однако никакой инициализации базы данных не происходит - если я запускаю приложение без существующей базы данных вообще, я получаю SqlClient исключение:
A System.Data.SqlClient.SqlException was thrown: "Cannot open database MyEntities requested by the login. The login failed. Login failed for user 'localdev'."
localdev пользователь имеет полный доступ к SQL Server, и я могу войти в этот SQL Server с SSMS и создавать, падение, обновление и т.д. базы данных в порядке.
Если я запускаю приложение с существующей, но пустой базой данных, приложение пытается запустить первый запрос, который он может (в данном случае, некоторые запросы на верификацию пользователя), и сбой при исключении «Недопустимый объект» при попытке запроса таблиц, которые не существуют.
Если я запустил uow.Context.Database.Create() без существующей базы данных, база данных действительно создана, но исходные данные не вставлены.
Если я изменил инициализатор на DropCreateDatabaseAlways, инициализация не произойдет.
Точки останова ударяются по всем указанным выше строкам кода, поэтому немедленное пропускание не пропускается - единственная точка останова, которая не ударяется, является методом семени в инициализаторе, так что даже не вызывается (что не является " t удивительно, если инициализация не происходит!).
На данный момент у меня нет идей - все настроено так, как кажется, должно быть, но инициализации базы данных не происходит.