[英]Conditionally inserting data in a code-first migration with 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 類,可能類似於
migrationBuilder.InsertData(table: "ledger", column: "DisplayOrder", value: "10");
但是如何實現WHERE
子句呢? 我如何加載該類? 我的 Visual Studio 的快速操作和重構一直建議實現一個新類,所以我必須先安裝一些東西嗎?
任何幫助表示贊賞!
參考資料:到目前為止,我發現的所有內容都是關於為新列設置默認值。 那不是我所追求的。
您可以使用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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.