gpt4 book ai didi

C# Entity Framework 未初始化数据库

转载 作者:太空宇宙 更新时间:2023-11-03 15:30:25 24 4
gpt4 key购买 nike

我正在尝试使用 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);
}

现在的问题是:

  • 当我构建我的应用程序时,我的默认数据没有被插入。我真的很确定。

  • 如果我再次尝试构建我的应用程序,我会遇到如下异常:

    Dog entity is already in database.

已启用迁移。

我已经尝试删除 db.Database.Initialize(true),但是当我这样做时,我的数据库甚至都没有创建。

最佳答案

默认情况下,您的数据库使用 CreateDatabaseIfNotExits 初始化程序。这就是你得到异常(exception)的原因。所以我认为你需要做的是:

在您覆盖的 OnStartup 上,您可以使用

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext,Configuration>)

为此,您需要将 Configuration.cs 类从 internal sealed 更改为 Public

作为引用,您可以查看本文的最底部 MigrateDatabaseToLatestVersion

关于C# Entity Framework 未初始化数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33941839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com