簡體   English   中英

C#實體框架未初始化數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM