SQL Server視圖可以有主鍵和外鍵嗎?

.net ado.net-entity-data-model database-design entity-framework sql-server

是否可以在Microsoft SQL Server Management Studio中為數據庫視圖定義主鍵和外鍵?怎麼樣?

我正在嘗試創建一個ADO.NET實體數據模型來讀取我無法修改的四個舊的,格式不正確的數據庫表。我已經創建了我需要的數據的視圖。

這四個視圖應該映射到一個簡單的三實體EDMX,它具有一對多關係。

創建數據模型時出現此錯誤:

表/視圖'...'沒有定義主鍵,也沒有推斷出有效的主鍵。此表/視圖已被排除。要使用該實體,您需要檢查您的架構,添加正確的密鑰並取消註釋。

它正確地推斷出兩個視圖的主鍵。但未能與其他兩個這樣做。

我的一個問題視圖使用聚合函數:

SELECT MAX(...) ... GROUP BY ...

另一個應該有兩個外鍵的複合主鍵。

熱門答案

您需要定義視圖,以便:

  • 包括所有PRIMARY KEY
  • 不使用任何JOIN
  • 不使用任何聚合函數或UNION

視圖中的任何行都應映射到表中的一行。

我的一個問題視圖使用聚合函數

它無法更新。對於只讀實體, 這裡有一個解決方案:

如果無法推斷出密鑰,則會將包含相應EntityType元素(沒有Key元素)的代碼註釋添加到.edmx文件的SSDL部分。

在您的情況下,因為您似乎想要一個只讀實體,您可以:

  1. 取消註釋SSDL實體
    • 將一個/一些屬性標記為Nullable =“False”
    • 添加適當的Key元素
    • 添加相應的定義查詢。

對於第二個問題:

另一個應該有兩個外鍵的複合主鍵

來自文檔

表示數據庫中兩個表之間的多對多關係的表可能在概念架構中沒有等效實體。當EDM工具遇到沒有除兩個外鍵之外的列的表時,映射表在概念模式中表示為多對多關聯而不是實體。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因