c# - Entity Framework varchar 外键不区分大小写

标签 c# sql-server entity-framework entity-framework-6

几年前有人提出了以下问题:Entity Framework nvarchar Case Sensitivity on Foreign key .

简而言之,答案是:EF 使用 CLR 比较延迟加载关联的键,并且始终以区分大小写的方式执行此操作,即使数据库设置为不区分大小写的排序规则也是如此。

不幸的是,我目前参与的项目大量使用了 VARCHAR 主键列。数据库排序规则不区分大小写。

除了可能在主键列上设置 CS 排序规则之外,修复数据库设计确实不是一个选项(但这可能会破坏客户端应用程序)。

所以我的问题有两个方面:

  1. 现在的 Entity Framework 是否提供指令或设置 某种,指示它进行不区分大小写的比较?
  2. 如果不是,是否可以使用触发器来自动更改外键 匹配主键的大小写?或者你能想到任何 其他解决方法?

顺便说一句:SQL Server 2008 R2 和 Entity Framework 版本 6。

最佳答案

无需过多分析,以下是您可以尝试的事项列表:

  1. 编写存储过程并使用 LOWER() 函数,这里有一个链接:http://www.w3schools.com/sql/sql_func_lcase.asp
  2. 使用模型优先来映射您的数据库
  3. 通过 'ModelContext'.'Entity'.Find('PrimaryKey') 获取两个实体,并使用 .NET 中的 toLowerCase() 方法建立“关联”
  4. 如果您只想获取数据而不更改寄存器,请在 SQL Server 中创建一个 View

关于c# - Entity Framework varchar 外键不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32224102/

相关文章:

c# - Entity Framework 中的 Datetime.UtcNow 查询的计算结果与 C# IL 中的 DateTime.UtcNow 不同

c# - 在 C# Razor 中将字符串呈现为 HTML

sql-server - 为什么合并复制在设置表的 LOCK_ESCALATION 时会失败?

sql - 你能写一个关键字之间没有空格的sql语句吗

entity-framework - 如何首先在 EF 4.1 代码中映射父列

.net - 类型 'System.Data.Entity.DbContext' 在未引用的程序集中定义。您必须添加对程序集“EntityFramework 2”的引用

c# - Marshal.Copy,将一个 IntPtr 数组复制到一个 IntPtr

c# - iTextSharp 删除线

c# - Auth0 Blazor 从源 'https://dev-xx.us.auth0.com/oauth/token' 获取 'https://xx.azurewebsites.net' 的访问已被 CORS 策略阻止

sql-server - 我可以安排一个作业在每个时区的午夜运行,以及如何让进程知道要处理哪个时区?