EF Core 中的 SQL Server 排序规则

Posted

技术标签:

【中文标题】EF Core 中的 SQL Server 排序规则【英文标题】:SQL Server Collations In EF Core 【发布时间】:2018-07-01 18:38:04 【问题描述】:

如何使用注解或 Fluent API 指定列、表或数据库的排序规则?我知道 mysql Provider 有一些干净的方法。但是,除了执行原始 SQL 命令之外,我找不到任何用于 SQL Server 的方法。

【问题讨论】:

这个有什么乐趣吗? 嗨,Ehsan,如果对您有帮助,您介意将答案标记为已接受吗? 【参考方案1】:

数据库和列级别的 UseCollat​​ion() 是 added to EF Core 5。

【讨论】:

【参考方案2】:

看起来根本不会做:

这是 aspnet/EntityFrameworkCore 中的已关闭问题:CodeFirst: Set column collation

我们讨论并得出结论,为每列设置不同的排序规则并不是一个很常见的要求,而且我们可能不会在 EF 中将其设为头等舱。这将是使用注释定义其他元数据然后扩展我们的 SQL 生成器来处理这些并指定排序规则的好选择。

唯一的解决方案似乎是这个:Entity Framework Code First - Change Table Column Collation

...您可以创建自定义数据库初始化程序并执行 ALTER TABLE 命令。

【讨论】:

【参考方案3】:

虽然可以在创建后更改数据库的排序规则(虽然它的表中有一些数据),但最好在创建任何表之前设置数据库的排序规则。 因此,在创建任何表之前首先在 EF 核心中创建数据库:

    最好确保您没有在项目的 DbContext 文件中添加任何 DbSet。 打开 Nuget 包管理器 运行此代码
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

【讨论】:

请查看另一个(现已编辑)现有答案。在 EF 核心 5 中不需要您在此处执行的操作。

以上是关于EF Core 中的 SQL Server 排序规则的主要内容,如果未能解决你的问题,请参考以下文章

ASP MVC 应用程序中的列加密与使用 .net Core / EF Core 的 SQL Server 2016

我可以通过在 EF Core 和 SQL Server 中的 OrderBy() 之前使用 Where() 来提高查询的性能吗?

如何编写此扩展方法以由 EF Core 转换为 SQL Server?

在.NET Core类库中使用EF Core迁移数据库到SQL Server

EF Core Linq-to-Sql GroupBy SelectMany 不适用于 SQL Server

如何配置 EF Core 5 以使 MS SQL Server 数据库生成 Guid 密钥