繁体   English   中英

代码优先迁移中的 EFCore AlterColumn MaxLength

[英]EFCore AlterColumn MaxLength in Code First Migration

使用 Visual Studio 2019 C#。

我对代码优先开发方法很陌生。

我已经制作了一个有效的 ToDo.cs 数据 model 和 ApplicationDbContext.cs。 我运行 PM>add-migration 自动生成下面的数据迁移,然后 PM>database-update 成功将表提交到我的 SQL 服务器。

FILENAME: 20200815211807_AddedToDoTable.cs


using System;
using Microsoft.EntityFrameworkCore.Migrations;

namespace BlazorApp.Data.Migrations
{
    public partial class AddedToDoTable : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "ToDoList",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    Name = table.Column<string>(maxLength: 15, nullable: false),
                    Status = table.Column<string>(nullable: false),
                    DueDate = table.Column<DateTime>(nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_ToDoList", x => x.Id);
                });
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "ToDoList");
        }
    }
}

现在我需要将 [Name] 列的字符串长度从 15 更改为 25。因此,我创建了一个新的迁移,如下所示:

using Microsoft.EntityFrameworkCore.Migrations;

namespace BlazorApp.Data.Migrations
{
    public partial class ChangeNameLength : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.Sql("ALTER TABLE ToDoList ALTER COLUMN Name nvarchar(25);");
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
        }
    }
}

但是 Package 管理器说:“对象引用未设置为 object 的实例。” 并且不做任何改变。

我究竟做错了什么? 你能帮我理解这个简单的变化吗?

谢谢,杰森

我认为我的问题与我对 Package 管理器控制台的使用有关。

我重新开始使用相同的迁移脚本,一切正常!

PM> add-migration "ChangedNameLength"
Build started...
Build succeeded.
To undo this action, use Remove-Migration.
PM> update-database
Build started...
Build succeeded.
Done.
PM> 

为什么不使用正确的迁移语法:

    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<string>(
         name: "Name",
         table: "ToDoList",
         maxLength: 25);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM