【发布时间】:2022-03-15 22:59:52
【问题描述】:
我正在使用 SQL Server,我在其中设计了一个视图来汇总两个表的结果,并且我希望输出是包含结果的单个表。我的查询简化如下:
SELECT SUM(col1), col2, col3
FROM Table1
GROUP BY col2, col3
这为我提供了我想要的数据,但在更新我的 EDM 时,视图被排除在外,因为“无法推断出主键”。
经过一些研究,我修改了查询以欺骗 id 列,如下所示:
SELECT ROW_NUMBER() OVER (ORDER BY col2) AS 'ID', SUM(col1), col2, col3
FROM Table1
GROUP BY col2, col3
这种查询给了我一组很好的增加的 id。但是,当我尝试更新我的模型时,它仍然排除了我的视图,因为它无法推断出主键。我们如何使用聚合记录并将它们与 Linq-to-Entities 连接起来的视图?
【问题讨论】:
-
如果您正在更新的表/视图没有定义主键,则您无法使用 LINQ 执行插入/更新。它需要一种唯一标识行的方法。
-
我知道它需要一种唯一标识行的方法。考虑到在表中聚合数据的任务,我该如何完成?
-
@Jim 您在其中一个源表上有一个 id 列吗?如果是这样,您可以尝试
MAX(id) as id -
@qujck 是的,这似乎给了我唯一的 ID。但是,当我更新我的 edmx 时,它仍然给我错误“无法推断主键,排除表”。
-
SELECT ISNULL(MAX(id), 0) as ID, SUM(col1), col2, col3 FROM Table1 GROUP BY col2, col3这行得通。实体模型能够推断出 ID 作为主键。这有什么缺点吗?
标签: entity-framework linq-to-entities