gpt4 book ai didi

entity-framework - 为什么我不能在 Entity Framework 4.0 中使用包含联合的 View ?

转载 作者:行者123 更新时间:2023-12-01 07:03:04 24 4
gpt4 key购买 nike

我有一个与此类似的 View :

SELECT Id, Name
FROM Users
UNION ALL
SELECT NULL as [Id], NULL as [Name]

当我尝试在 Entity Framework 中映射到此 View 时,它失败了。我没有收到错误消息,但我的数据存储中不存在该 View 。为什么是这样?有办法解决吗?

最佳答案

我知道这是一个已经标记为已回答的较旧问题,但我想发布一个替代编辑 edmx 的方法。经过大量的谷歌搜索和数小时的拉扯,尝试不同的选择后,我艰难地学到了这一点......

对于 View ,EF 尝试通过标识不可为空的列来推断主键
和非二进制(见 Create an Entity Key When No Key Is Inferred)。

对于用于将相关数据展平以进行查找的 View ,这可能会导致许多列(或错误的列)被推断为键。

对于带有 UNION 的 View ,它可能会导致相反的问题,因为可能没有可以安全地包含为键的真实标识列。

要强制 EF 将列标识为键,您可以使用 ISNULL() 来确保该值不可为空:ISNULL(column_name, replacement_value)
要强制 EF 不将列标记为键,您可以使用 NULLIF() 使其可以为空:NULLIF(column_name, value_not_equal_to_parameter_1)
如果您需要确保返回一个值,但又不想将其标记为键,我相信 COALESCE(column_name, replacement_value)将在不将列标记为键的情况下完成 ISNULL 的工作

如果确实没有可用的色谱柱 作为主键(如在 UNION View 中),您可以通过在 SELECT 语句中结合使用 ISNULL() 和 ROW_NUMBER() 来伪造不可为空的 PK:SELECT ISNULL(ROW_NUMBER() OVER (ORDER BY sort_criteria), 0) as 'ALIASNAME'
作为替代方案,edmx 绝对可以像 Marcos Prieto 建议的那样直接编辑,但是您可能会在下次运行“从数据库更新模型”时覆盖这些更改。

希望这对将来遇到此问题的人有所帮助!

关于entity-framework - 为什么我不能在 Entity Framework 4.0 中使用包含联合的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6494996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com