实体框架:查看没有主键的排除

时间:2013-06-18 18:15:30

标签: entity-framework linq-to-entities

我正在使用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连接?

2 个答案:

答案 0 :(得分:1)

正如评论中已经讨论过的,您可以尝试将MAX(id) as id添加到视图中。根据您的反馈,这将成为:

SELECT ISNULL(MAX(id), 0) as ID, 
       SUM(col1), 
       col2, 
       col3 
FROM   Table1 
GROUP BY col2, col3

另一个选择是尝试在视图上创建索引:

CREATE UNIQUE CLUSTERED INDEX idx_view1 ON dbo.View1(id)

答案 1 :(得分:0)

我使用此代码更改视图

ISNULL(ROW_NUMBER() OVER(ORDER BY ActionDate DESC), -1) AS RowID 

我在多关系视图/表查询中使用此子句

ROW_NUMBER永远不会给出null值,因为它从未见过-1