簡體   English   中英

使用實體框架在代碼優先遷移中有條件地插入數據

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

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