Условная вставка данных в миграцию с первым кодом с Entity Framework - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь выполнить вторую миграцию, используя 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");
        }
    }
}

Логика c как заполнить этот столбец на самом деле довольно проста, в 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, чтобы добиться именно этого. Я прочитал, что должен использовать класс igrationBuilder , вероятно, что-то вроде

migrationBuilder.InsertData(table: "ledger", column: "DisplayOrder", value: "10");

, но как реализовать предложение WHERE? И как мне загрузить этот класс? My Visual Studio *1014* Быстрые действия и рефакторинг * постоянно предлагает реализовать новый класс, поэтому мне сначала нужно что-то установить?

Любая помощь приветствуется!

Ссылки: все Я обнаружил, что пока речь идет об установке значений по умолчанию для нового столбца. Это не то, что мне нужно.

1 Ответ

1 голос
/ 20 января 2020

Вы можете использовать igrationBuilder. 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 .

...