確實Entity Framework不喜歡SQL Server視圖,因爲主鍵在視圖中不明顯。不幸的是,在模型中指定[Key]似乎不夠。但是,它可以完成並且在98%的情況下非常有用,在這種情況下,有一個視圖組合了表格,而您只是想在網格中顯示它的數據。關鍵(赦免雙關語)是正確定義視圖。
我原來的觀點包含以下幾列:
DepartmentCode(varchar(8),not null)
DepartmentName(varchar(60), not null)
DivisionCode(varchar(8), null)
DivisionName(varchar(8), null)
StatusCode(char(1), not null)
Virtual(varchar(1), not null)
,並在我的模型我指定
[Key]
[Column("DepartmentCode")]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[StringLength(8)]
[Display(Name = "Department Code")]
public string DepartmentCode { get; set; }
當我架式這一點,並顯示在索引視圖,我被提及的主要錯誤鍵。顯然,實體框架假定所有非空字段都對主鍵起作用。
刪除額外的不是空值的伎倆。我強迫列在視圖中使用到可空如下:
CREATE view [dbo].[Departments] as
select DepartmentCode
,nullif(DepartmentName,'') as DepartmentName
,nullif(DivisionCode,'') as DivisionCode
,nullif(DivisionName,'') as DivisionName
,nullif(StatusCode,'') as StatusCode
,nullif(Virtual,'') as Virtual
from ....
現在視圖列看起來像這樣
DepartmentCode(varchar(8),not null)
DepartmentName(varchar(60), null)
DivisionCode(varchar(8), null)
DivisionName(varchar(8), null)
StatusCode(char(1), null)
Virtual(varchar(1), null)
有一次,我改變了看法,索引視圖工作正常。
我還確認,包含複合(多列)鍵的視圖也將工作,只要這些列不爲空,並且在您的模型中,您在每列指定了[Key],並且還添加Order = 1和Order = 2到這些鍵列上的[Column]註釋。
當然,這裏的假設是您有權修改視圖(或者可以創建替代視圖)。我只能確認這個作品在MVC 5和實體框架6上。
向我們展示這個動作和視圖(cshtml):「當我從這個模型和實體創建一個Controller類時,視圖顯示沒有數據,當我加載網站。」 – AaronLS 2013-03-11 21:12:38
Aaron - 我仔細檢查了一下,看起來我實際上可以訪問我的MVC視圖中的SQL視圖模型對象,但它並不乾淨,也不會很好地格式化。我打算使用下面的解決方案之一併重新編碼。謝謝! – Skkra 2013-03-11 21:44:33