EF Core中的SQL Server排序规则

13

我该如何使用注释或Fluent API指定列、表或数据库的排序规则?我知道对于MySQL提供程序有一些简洁的方法。然而,除了执行原始SQL命令外,我找不到任何适用于SQL Server的方法。


这个有什么进展吗? - Lee Gunn
嗨Ehsan,如果答案对您有帮助,您介意将其标记为已接受吗? - Gert Arnold
3个回答

5

2
看起来根本不会完成:
这是在 aspnet/EntityFrameworkCore 中关闭的问题:CodeFirst:设置列排序规则 我们讨论并得出结论,按列设置不同的排序规则不是非常普遍的需求,可能不是我们首先在 EF 中实现的东西。这将成为使用注释定义其他元数据的好候选项,然后扩展我们的 SQL 生成器来处理这些内容并指定排序规则。
唯一的解决方案似乎是这个:Entity Framework Code First - 更改表列排序规则 您可以创建自定义数据库初始化程序并执行 ALTER TABLE 命令。

1
虽然在创建数据库后(当其中的表中有一些数据时)更改数据库的排序是可能的,但最好在创建任何表之前设置数据库的排序。 因此,在 EF Core 中,在创建任何表之前初始化创建数据库:
  1. 最好确保您尚未在项目的 DbContext 文件中添加任何 DbSet。
  2. 打开 Nuget 包管理器。
  3. 运行此代码。
PM> add-migration CreateDatabase

现在,在迁移文件中创建了一个空的 UpDown 方法,如下所示:
        protected override void Up(MigrationBuilder migrationBuilder)
        {
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
        }


Up方法中编写此代码。确保您的排序名称正确。
    migrationBuilder.AlterDatabase("CollationName");
    //or
    migrationBuilder.Sql("EXEC('ALTER DATABASE [POMADB] COLLATE     CollationName ');", suppressTransaction: true);

运行这段代码。
    PM> update-database

我已经在.NET Core 5、Visual Studio 2019和Ef core 5.0.9中测试了这段代码。
要获取更多信息,请查看此链接 Ability to specify database collation

1
请查看其他(现已编辑过的)现有答案。在 EF Core 5 中,您在此处所做的操作是不必要的。 - Gert Arnold
截至2023年5月,在Azure SQL Server环境中更新排序规则无法正常工作:https://learn.microsoft.com/en-us/sql/relational-databases/collations/set-or-change-the-database-collation?view=sql-server-ver16 - UNeverNo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接