使用 Entity Framework 在代码优先迁移中有条件地插入数据
Conditionally inserting data in a code-first migration with Entity Framework
我正在尝试使用 Entity Framework 进行第二次迁移,到目前为止我生成了这样的代码
namespace Entity.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class LedgerDisplayOrder : DbMigration
{
public override void Up()
{
AddColumn("Ledgers", "DisplayOrder", c => c.Int());
// Hic sunt leones
}
public override void Down()
{
DropColumn("Ledgers", "DisplayOrder");
}
}
}
这一栏的填写逻辑其实很简单,在SQL中就是这样:
ALTER TABLE [Ledgers] ADD [DisplayOrder] INT NULL;
UPDATE [Ledgers]
SET DisplayOrder = 10
WHERE [Id] = 26 OR [Id] = 27 OR [Id] = 23;
UPDATE [Ledgers]
SET DisplayOrder = 20
WHERE [Id] = 29 OR [Id] = 9;
UPDATE [Ledgers]
SET DisplayOrder = 30
WHERE [Id] = 28 OR [Id] = 23;
换句话说,迁移应该在迁移过程中自动填充,但我不确定在 // hic sunt leones
中放置什么才能实现这一点。我读到我应该使用 migrationBuilder class,可能类似于
migrationBuilder.InsertData(table: "ledger", column: "DisplayOrder", value: "10");
但是如何实现WHERE
子句呢?我该如何加载 class?我的 Visual Studio 的 Quick Actions and Refactoring 一直建议实施新的 class,所以我必须先安装一些东西吗?
感谢任何帮助!
参考资料:到目前为止我发现的都是关于为新列设置默认值的。那不是我追求的。
- Entity Framework Code First Migration
您可以使用 migrationBuilder.Sql 命令在迁移期间执行纯 SQL 表达式:
您可以使用
而不是 InsertData
Sql("UPDATE [Ledgers]
SET DisplayOrder = 10
WHERE [Id] = 26 OR [Id] = 27 OR [Id] = 23; ");
这是 migrationBuilder.Sql
的缩写,可以通过
加载
using Microsoft.EntityFrameworkCore.Migrations;
如果您使用的是 EF Core 或(在您的情况下)
using System.Data.Entity.Migrations;
如果您正在使用 EntityFramework。
我正在尝试使用 Entity Framework 进行第二次迁移,到目前为止我生成了这样的代码
namespace Entity.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class LedgerDisplayOrder : DbMigration
{
public override void Up()
{
AddColumn("Ledgers", "DisplayOrder", c => c.Int());
// Hic sunt leones
}
public override void Down()
{
DropColumn("Ledgers", "DisplayOrder");
}
}
}
这一栏的填写逻辑其实很简单,在SQL中就是这样:
ALTER TABLE [Ledgers] ADD [DisplayOrder] INT NULL;
UPDATE [Ledgers]
SET DisplayOrder = 10
WHERE [Id] = 26 OR [Id] = 27 OR [Id] = 23;
UPDATE [Ledgers]
SET DisplayOrder = 20
WHERE [Id] = 29 OR [Id] = 9;
UPDATE [Ledgers]
SET DisplayOrder = 30
WHERE [Id] = 28 OR [Id] = 23;
换句话说,迁移应该在迁移过程中自动填充,但我不确定在 // hic sunt leones
中放置什么才能实现这一点。我读到我应该使用 migrationBuilder class,可能类似于
migrationBuilder.InsertData(table: "ledger", column: "DisplayOrder", value: "10");
但是如何实现WHERE
子句呢?我该如何加载 class?我的 Visual Studio 的 Quick Actions and Refactoring 一直建议实施新的 class,所以我必须先安装一些东西吗?
感谢任何帮助!
参考资料:到目前为止我发现的都是关于为新列设置默认值的。那不是我追求的。
- Entity Framework Code First Migration
您可以使用 migrationBuilder.Sql 命令在迁移期间执行纯 SQL 表达式:
您可以使用
而不是InsertData
Sql("UPDATE [Ledgers]
SET DisplayOrder = 10
WHERE [Id] = 26 OR [Id] = 27 OR [Id] = 23; ");
这是 migrationBuilder.Sql
的缩写,可以通过
using Microsoft.EntityFrameworkCore.Migrations;
如果您使用的是 EF Core 或(在您的情况下)
using System.Data.Entity.Migrations;
如果您正在使用 EntityFramework。