數據庫已成功創建(與表一樣),但沒有播種。我花了幾個小時閱讀了大量的文章,但一直沒能得到它。有什麼建議麼?如何讓我的數據庫使用實體框架CodeFirst來種子?
在附註中,是否可以調用初始化程序而不在客戶端中引用我的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);
}
您要新增種子項目的數據上下文?我知道我以前錯過了。 – 2011-06-10 22:32:06
是的,我是。感謝您檢查:)。 – OpticalDelusion 2011-06-10 22:53:48
= D無後顧之憂。你能否在代碼中加入一個斷點並確保你的種子被調用? – 2011-06-10 23:16:21