База данных успешно создана (как и таблицы), но не заполнена.Я провел несколько часов и прочитал тонны статей, но так и не смог его получить.Любые предложения?
В примечании, можно ли вызвать инициализатор без ссылки на мой DatabaseContext в клиенте?
Я включил весь соответствующий код, который мог придумать.Если что-нибудь еще поможет, пожалуйста, дайте мне знать.
Вещи, которые я пробовал:
- Я удалил строку подключения (так как в любом случае по умолчанию используется sqlexpress, только имя изменилось)
- Я изменил DropCreateDatabaseIfModelChanges на DropCreateDatabaseAlways, все то же самое.
Редактировать: действительно странная вещь - это сработало один раз, но я понятия не имею, как или почему это снова сломалось.Я предполагаю строки подключения, но кто знает.
DatabaseInitializer.cs
public class DatabaseInitializer : DropCreateDatabaseIfModelChanges<DatabaseContext>
{
protected override void Seed(DatabaseContext context)
{
// Seeding data here
context.SaveChanges();
}
}
DatabaseContext.cs
public class DatabaseContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder mb)
{
// Random mapping code
}
public DbSet<Entity1> Entities1 { get; set; }
public DbSet<Entity2> Entities2 { get; set; }
}
Global.asax.cs - Application_Start ()
protected void Application_Start()
{
Database.SetInitializer<DatabaseContext>(new DatabaseInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Клиент web.config
<connectionStrings>
<add name="DatabaseContext" connectionString="data source=.\SQLEXPRESS;Database=Database;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
РЕШЕНИЕ
Ради документации я поделюсь своим решением здесь.Навигация по всем комментариям была бы болью в любом случае.В конце концов у меня были DatabaseInitializer и DatabaseContext в отдельных классах.Я не совсем понимаю, хотя эти крошечные изменения исправили это, но вот оно.
DatabaseInitializer.cs
public class DatabaseInitializer : CreateDatabaseIfNotExists<DatabaseContext>
{
protected override void Seed(DatabaseContext context)
{
// Seed code here
}
}
DatabaseContext.cs
public class DatabaseContext : DbContext
{
public DatabaseContext() : base("MyDatabase") { }
protected override void OnModelCreating(DbModelBuilder mb)
{
// Code here
}
public DbSet<Entity> Entities { get; set; }
// Other DbSets
}
Global.asax.cs - Application_Start ()
protected void Application_Start()
{
Database.SetInitializer(new DatabaseInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}