Как я могу настроить свою базу данных для заполнения с помощью Entity Framework CodeFirst?

База данных успешно создана (как и таблицы), но не заполнена. Я потратил несколько часов и прочитал тонны статей, но так и не смог их получить. Есть предложения?

Кстати, можно ли вызвать инициализатор без ссылки на мой DatabaseContext в клиенте?

Я включил весь соответствующий код, который мог придумать. Если что-нибудь еще будет полезно, дайте мне знать.

Что я пробовал:

  1. Я удалил свою строку подключения (так как по умолчанию она все равно sqlexpress, изменилось только имя)
  2. Я изменил DropCreateDatabaseIfModelChanges на DropCreateDatabaseAlways , все то же самое.

Edit: Действительно странно, что однажды он сработал, но я понятия не имею, как и почему он снова сломался. Я предполагаю строки подключения, но кто знает.

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);
}

Client 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);
}
62
задан JnJnBoo 1 November 2012 в 19:54
поделиться