它有一個DefiningQuery但沒有InsertFunction元素......錯誤

asp.net entity-framework

這件事讓我發瘋,這個錯誤對我來說毫無意義:

無法更新EntitySet'TableB',因為它具有DefiningQuery,並且元素中不存在支持當前操作的元素。

我的表格是這樣的:

TableA
int idA (identity, primary key)
...

TableB
int idA (FK for TableA.idA)
int val

TableB在SQL Server中沒有定義的主鍵。實體框架已導入表和關聯,並將兩個字段都設置為鍵。但是當我嘗試插入表格時它會輸出錯誤!

怎麼了??


編輯:正如亞歷克斯所建議的,解決方案是:

  1. 右鍵單擊edmx文件,選擇Open with,XML editor
  2. 在edmx:StorageModels元素中找到實體
  3. 完全刪除DefiningQuery
  4. 將商店重命名為:Schema =“dbo”為Schema =“dbo”(否則,代碼將生成錯誤,說明名稱無效)
  5. 刪除商店:名稱屬性

我把鑰匙保留原樣,因為對我來說兩列都是鑰匙的一部分是可以的。

一般承認的答案

當遇到沒有PrimaryKey的表時,它被視為View。

並且視圖顯示在StorageModel \ EntitySet [n] \ DefiningQuery元素的EDMX文件中(在XML編輯器中打開以查看)。

當你有一個DefiningQuery時,除非你添加修改函數,否則實體會變為只讀。您需要3個修改函數(也稱為存儲過程),每個函數對應一個插入,更新和刪除。

但是你有兩個選擇:

改變關鍵定義:

  1. 並且說服EF認為它認為的觀點實際上是一張桌子
  2. 或者添加適當的修改功能

在你的情況下,我建議(1)。


熱門答案

只需向表中添加主鍵即可。而已。問題解決了。

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)


Related

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