[英]C# Entity Framework not initializing database
我正在嘗試使用EF代碼優先構建基於WPF數據庫的應用程序。 我有一個無法生成的數據庫的問題,我試圖這樣解決:
using (var db = new MyDBContext())
{
db.Database.Initialize(true);
}
我已將此代碼插入App.xamls.cs
,重寫了OnStartup
方法(此方法有效)。
然后,我嘗試播種一些默認數據,如下所示:
public class MyDBContextSeeder : DropCreateDatabaseAlways<MyDBContext>
{
protected override void Seed(MyDBContext context)
{
IList<Dog> defaultDog = new List<Dog>();
defaultDog.Add(new Dog("Spike"));
foreach (Dog d in defaultDog)
context.Dogs.Add(d);
// more data here....
base.Seed(context);
}
}
而且,由於我使用的是自定義初始化程序,因此我更改了上面的第一個代碼,如下所示:
using (var db = new PizzeriaDBContext())
{
new MyDBContextSeeder().InitializeDatabase(db); //this line
db.Database.Initialize(true);
}
現在的問題是:
當我構建應用程序時,未插入默認數據。 我真的很確定。
如果我嘗試再次構建應用程序,則會出現類似以下的異常:
狗實體已經在數據庫中。
啟用了遷移。
我已經嘗試刪除db.Database.Initialize(true)
,但是當我這樣做時,甚至沒有創建我的數據庫。
默認情況下,您的數據庫使用CreateDatabaseIfNotExits初始化程序。 這就是為什么您要獲得例外。 所以我認為您需要做的是以下幾點:
在覆蓋的OnStartup上,您可以使用
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext,Configuration>)
為此,您需要將Configuration.cs類從內部密封更改為公共
作為參考,您可以看一下本文的最底部MigrateDatabaseToLatestVersion
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.