Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架varchar外键不区分大小写_C#_Sql Server_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 实体框架varchar外键不区分大小写

C# 实体框架varchar外键不区分大小写,c#,sql-server,entity-framework,entity-framework-6,C#,Sql Server,Entity Framework,Entity Framework 6,几年前,有人提出了以下问题: 简言之,答案是:EF使用CLR比较延迟加载关联的键,并且始终以区分大小写的方式进行比较,即使数据库设置为不区分大小写的排序规则 不幸的是,我目前参与的项目大量使用VARCHAR主键列。数据库排序规则不区分大小写 除了在主键列上设置CS排序规则之外,修复数据库设计实际上不是一个选项(但这可能会破坏客户端应用程序) 所以我的问题有两个: 实体框架现在是否提供了一个指令或设置 某种,指示它进行不区分大小写的比较 如果没有,是否可以使用触发器自动更改外键 要匹配主键的外壳?

几年前,有人提出了以下问题:

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

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

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

所以我的问题有两个:

  • 实体框架现在是否提供了一个指令或设置 某种,指示它进行不区分大小写的比较
  • 如果没有,是否可以使用触发器自动更改外键 要匹配主键的外壳?或者你能想到任何 其他解决办法

  • 顺便说一句:SQL Server 2008 R2和实体框架版本6。

    如果不进行太多分析,下面列出了您可以尝试的内容:

  • 编写存储过程并使用LOWER()函数,这里有一个链接:
  • 首先使用模型映射数据库
  • 通过“ModelContext”“Entity”“Find('PrimaryKey')获取这两个实体,并使用.NET中的toLowerCase()方法进行“关联”
  • 如果您仅尝试在不更改寄存器的情况下获取数据,请在SQL Server中创建视图

  • 第一个建议没用。数据库已不区分大小写。实体框架不遵守数据库排序规则。从数据库中检索正确的记录,但实体框架在填充其实体时将删除记录。发生删除是因为EF对键使用CLR字符串比较,默认情况下区分大小写。第二个建议很好。不幸的是,我们无法重新构建数据库。因此,使用模型优先表示将导致完全相同的模型,使用VARCHAR列作为主键。您的第三个建议有点违背了使用EF的全部目的。只需删除EF并根据存储过程检索/映射所有实体将更容易。除了您的第一个建议:如果您的意思是我也应该通过此存储过程检索所有实体,那么它可能无法工作。但更可能的是,它只是放弃EF,走老式的方式,因为几乎每一张桌子都需要SPs-(使用视图也是如此。感谢您提出这个问题,我每隔几年就在将现有系统迁移到EF时遇到这个问题。Github上有一个问题,我刚刚对此发表了评论: