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

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

【问题讨论】:

  • 这个有什么乐趣吗?
  • 嗨,Ehsan,如果对您有帮助,您介意将答案标记为已接受吗?

标签: asp.net-mvc ef-code-first entity-framework-core ef-core-2.0 entity-framework-core-migrations


【解决方案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 核心中创建数据库:

      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 中测试过这段代码

      欲了解更多信息,请查看此链接Ability to specify database collation

      【讨论】:

      • 请查看另一个(现已编辑)现有答案。在 EF 核心 5 中不需要您在此处执行的操作。
      猜你喜欢
      • 2011-05-05
      • 2011-09-06
      • 2012-06-08
      • 2010-10-07
      • 2020-12-16
      • 2012-01-21
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多