12

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

4

3 回答 3

4

EF Core 5中添加了用于数据库和列级别的 UseCollat​​ion() 。

于 2020-10-09T20:26:26.093 回答
2

看起来它根本不会完成:

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

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

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

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

于 2019-02-13T12:39:51.327 回答
0

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

  1. 最好确保您没有在项目的 DbContext 文件中添加任何 DbSet。
  2. 打开 Nuget 包管理器
  3. 运行此代码
PM> add-migration CreateDatabase
  1. 现在在迁移文件中创建了一个空的UpDown方法,如下所示:
        protected override void Up(MigrationBuilder migrationBuilder)
        {
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
        }

  1. 在Up方法中编写此代码。确保您的排序规则名称正确。
    migrationBuilder.AlterDatabase("CollationName");
    //or
    migrationBuilder.Sql("EXEC('ALTER DATABASE [POMADB] COLLATE     CollationName ');", suppressTransaction: true);
  1. 运行此代码
    PM> update-database

我已经在 .NET Core 5、Visual Studio 2019、Ef core 5.0.9 中测试过这段代码

有关更多信息,请查看此链接指定数据库排序规则的能力

于 2021-09-05T10:11:46.433 回答