使用迁移脚本更改 EF Core 中的数据库排序规则

Alter database collation in EF Core using migration scripts

提问人:Hardik Parmar 提问时间:10/10/2023 最后编辑:jarlhHardik Parmar 更新时间:10/12/2023 访问量:78

问:

我正在尝试使用迁移脚本更改数据库的排序规则。

这是我尝试使用 EF Core 更新排序规则的代码。

protected override void Up(MigrationBuilder migrationBuilder)
{
        _ = migrationBuilder.AlterDatabase("SQL_Latin1_General_CP1_CS_AS");

        _ = migrationBuilder.CreateTable(
            name: "Employee",
            columns: table => new
            {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                EmployeeName = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false, collation: "LATIN1_GENERAL_CI_AI"),
            });
}

我收到此错误:

重置连接会导致与初始登录不同的状态。登录失败。
用户“sa”登录失败。
无法继续执行,因为会话处于终止状态。
当前命令发生严重错误。结果(如果有)应丢弃

C# sql-server .net-core 实体框架核心 排序规则

评论

1赞 jarlh 10/10/2023
您使用的是哪些 dbms?
0赞 Milan 10/10/2023
您能否检查并指定“重置连接”事件是否由于 而发生。AlterDatabase 或 .创建表?也许以上都不是。如果没有这两个命令中的任何一个,迁移是否有效?
0赞 Hardik Parmar 10/10/2023
MsSql 是数据库
1赞 Hardik Parmar 10/10/2023
我已经通过删除 .AlterDatabase,没有那行也能正常工作
1赞 Hardik Parmar 10/12/2023
当我们在单个事务中创建和更改数据库时,就会发生这种情况。(我的意思是,如果我们第一次创建迁移脚本,它将同时创建数据库和更改数据库)所以,这就是它抛出错误的原因。如果数据库已经创建,如果我们运行上述迁移,那么它可以正常工作。

答:

0赞 Milan 10/12/2023 #1


出现错误是因为连接已重置,并且连接处于终止状态,如消息所示。

解决方案
为每个特定更改创建单独的迁移,而不是将多个更改合并到单个迁移中。

在示例中,将迁移脚本分为两个脚本,如下所示:

迁移脚本 1:

// Change DB Collation:
protected override void Up(MigrationBuilder migrationBuilder)
{
        migrationBuilder.AlterDatabase("SQL_Latin1_General_CP1_CS_AS");
}

迁移脚本 2:

// Create Table ...
protected override void Up(MigrationBuilder migrationBuilder)
{
        migrationBuilder.CreateTable(
            name: "Employee",
            columns: table => new
            {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                EmployeeName = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false, collation: "LATIN1_GENERAL_CI_AI"),
            });
}