gpt4 book ai didi

c# - 在 EF 代码首次迁移期间创建表并将数据插入其中

转载 作者:可可西里 更新时间:2023-11-01 08:32:39 26 4
gpt4 key购买 nike

我正在使用 Entity Framework Code First 进行 Code First 迁移。

在迁移过程中,我需要创建一个新表,然后向其中插入一些数据。

所以我创建表:

CreateTable("MySchema.MyNewTable",
c => new
{
MYCOLUMNID = c.Int(nullable: false, identity: true),
MYCOLUMNNAME = c.String(),
})
.PrimaryKey(t => t.MYCOLUMNID);

然后我尝试插入数据:

using (var context = new MyContext())
{
context.MyNewTableDbSet.AddOrUpdate(new[]
{
new MyNewTable
{
MYCOLUMNNAME = "Test"
}
});
context.SaveChanges();
}

但是我得到一个错误:

Invalid object name 'mySchema.MyNewTable'.

有可能做我需要的吗?在同一迁移中创建一个表并向其中插入数据?

我已经有其他迁移,我在其中创建表或将数据插入表中,但从来没有在同一个迁移中......

最佳答案

我的建议是将代码插入到 Seed 中方法。 Migrations 在 DbMigrationsConfiguration 上引入了自己的 Seed 方法类(class)。此 Seed 方法在两个重要方面不同于数据库初始化程序 Seed 方法:

  • 只要执行 Update-Database PowerShell 命令,它就会运行。除非正在使用迁移初始化程序,否则迁移 Seed方法不会在您的应用程序启动时执行。
  • 它必须处理数据库已经包含数据的情况,因为迁移正在发展数据库而不是删除和重新创建它。

出于最后一个原因,在 Seed 方法中使用 AddOrUpdate 扩展方法很有用。 AddOrUpdate 可以检查一个实体是否已存在于数据库中,然后如果不存在则插入一个新实体,如果存在则更新现有实体。

因此,尝试以这种方式运行您想要的脚本:

 Update-Database –TargetMigration: ScriptName 

Seed 方法将完成插入数据的工作。

正如 Julie Lerman 在她的 blog 上所说的那样:

The job of AddOrUpdate is to ensure that you don’t create duplicates when you seed data during development.

关于c# - 在 EF 代码首次迁移期间创建表并将数据插入其中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28480481/

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