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】:数据库和列级别的 UseCollation() 是 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
-
现在在迁移文件中创建了一个空的 Up 和 Down 方法,如下所示:
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