2017-08-12

[ASP.NET] Entity Framework database first 注意事項

Entity Framework(EF) database first 是自行先建立好 DB Table,再透過 EF 將 Table 拉進來使用,是使用 EF 的其中一種方法,只是有些地方須要注意一下:

(一)
Table 一定要有定義 Primary Key(PK),如此 EF 對它做 Insert、Update、Delete 時才能成 功,但不影響 Select。


(二)
如果 Table 沒有定義 PK,在 EF 4 是加不進 Model 的,麻煩的是還沒有任何錯誤訊息提示,以前都傻傻的以為是 Model 壞了...(EF 之後的版本不知道有沒有更新了)。

但是如果你一開始有建立 PK 並加入 Model 了,然後再將 Table 的 PK 取消掉,再執行 EF 的 Update model from database,此時 Model 裡的 Table PK 會被取消,如果你對它做 Insert、Update、Delete 其中一個指令,就會出現如下錯誤訊息:

無法更新 EntitySet 'Table1',因為它有 DefiningQuery,但是在 <ModificationFunctionMapping> 項目中沒有 <InsertFunction> 項目來支援目前的作業。

(三)
另一種情況是 Table 沒有定義 PK,但有定義部份欄位 Nullable,這樣加到 EF Model 後,會自動將 Nullable 的欄位都變成 PK,這時如果你對這些欄位要做異動,就要遵守唯一值的原則,否則會出現如下錯誤訊息:

Models.testModel.msl(653,10) : 錯誤 3002: 對應片段中從第 653 行開始有問題:資料表 Table1 的索引鍵 (Table1.Name) 可能發生執行階段違規:資料行 (Table1.Name) 對應到概念端上 EntitySet Table1 的屬性 (Table1.Name),但這些屬性並非構成 EntitySet 的索引鍵屬性 (Table1.Name, Table1.Age)。




參考來源:亂亂寫 Blog

沒有留言:

張貼留言