2013-06-18 89 views
0

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

這種查詢給我IDS的一個很好的提高集。但是,當我嘗試更新我的模型時,它仍排除我的視圖,因爲它無法推斷主鍵。我們如何使用聚合記錄並將它們與Linq-to-Entities連接起來的視圖?

+0

如果您正在更新的表/視圖沒有定義主鍵,則無法使用LINQ執行插入/更新。它需要一種唯一標識行的方法。 –

+0

我知道它需要一種唯一標識行的方法。考慮到在表中彙總數據的任務,我該如何實現? – Shoe

+0

@Jim你有一個源列表上的ID列?如果是這樣,你可以嘗試'MAX(id)作爲ID' – qujck

回答

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) 
0

我使用此代碼改變觀點

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

我用這個子查詢/表查詢

ROW_NUMBER從來沒有給出空值,因爲它從來沒有看到n -1