【问题标题】:How to resolve collation conflicts with the Entity Framework?如何解决与实体框架的排序规则冲突?
【发布时间】:2013-01-15 20:44:46
【问题描述】:

我的 EF 模型从具有从链接服务器获取数据的视图的数据库中获取数据。链接服务器中数据库的排序规则已更改为 SQL_Latin1_General_CP1_CI_AS 而不是服务器。我假设这就是排序规则冲突的来源。每次我加入该视图时,我都会收到此错误:

“无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Modern_Spanish_CI_AS”之间的排序规则冲突。”

我发现在 SQL 中使用 COLLATE 可以轻松解决排序规则问题。我似乎找不到使用 LINQ 的方法。可以使用 LINQ 来处理这个问题,还是应该以不同的方式解决这个问题?

【问题讨论】:

    标签: sql-server linq entity-framework linq-to-entities collation


    【解决方案1】:

    我的理解是EF不支持这个功能。

    您可以创建一个新视图来解决冲突并使用 EF 查询新视图。

    【讨论】:

    • 如果我创建一个新视图,它仍将来自具有不匹配排序规则的服务器。
    • 我知道,但是您在问题中说“排序问题很容易在 SQL 中使用 COLLATE 解决” - 所以您应该能够在新视图中解决它...
    • 即使我在连接上使用的列上使用 COLLATE 创建一个新视图,它仍然会引发排序规则冲突异常
    • 您是否尝试过将排序规则放在查询的连接部分:table1 t1 join table2 t2 on t1.col COLLATE SQL_Latin1_General_xyz = t2.col
    • 这确实是 ORM 范围之外的一个边缘案例(尤其是像 EF 这样的婴儿),但我能感受到你的痛苦。 NULLS、日期和字符集都是关系数据库的致命弱点。在您的情况下,我倾向于为每个“远程”表创建一个视图,将其转换为与本地数据库的排序规则相匹配。让数据库处理字符集冲突/解决,因为它做得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多