EntiyFramework :Update model from database引起的两个问题
EntiyFramework一大特點就是Code first,但難免有時候因特殊原因需要Update model from database。此次使用該功能時遇到兩個問題,且記之。
[問題一]
Error 3027: No mapping specified for the following EntitySet/AssociationSet - XXXXXXX.
[起因]
在數據庫新建一張表,并使用Update model from database功能同步到EF, Add Association后,發生該錯誤。
[說明]
XXXXXXX代表關系名稱,例如一個外鍵關系:FK_Bug_TestCase。
[原因]
在EF中Add Association時,.edmx文件并未被同步創建。
[解決方案]
Step1:右鍵.edmx文件,以XML Editor方式打開,如下圖:
Step2:ctrl+F 搜索,找到名稱為XXXXXXX的Asscoiation節點,以FK_Bug_TestCase為例,并添加<ReferentialConstraint></ReferentialConstraint>節點,并設置Principal的Role屬性為主鍵表名,子節點PropertyRef的Name屬性為主鍵表用作外鍵的字段名;設置Dependent的Role屬性為外鍵表名,? 子節點PropertyRef的Name為外鍵字段名。如下圖所示:
Step3:保存即可。
?
[問題二]
? Unable to update the EntitySet 'Bug' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.
[起因]
在問題一已解決的前提下,對數據庫進行更新是引起。
[原因]
使用Update model from database功能時,EF在.edmx文件里創建了< DefiningQuery ></ DefiningQuery >節點。DefiningQuery 節點的作用,MSDN解釋如下:A defining query is commonly used to provide functionality similar to that provided by a database view, but the view is defined in the model, not the database.
[解決方案]
Step1:同問題一Step1,以XML Editor方式打開.edmx文件。
Step2:ctrl+F 搜索,找到名稱為DefiningQuery的節點(其實一眼就可以看出來它所在EntitySet跟別的EntitySet的不同,用的時候就看到了),并刪除。此外對其所在EntitySet節點的Store:Schema屬性的Store:命名空間去掉,并刪除Store:Name屬性。如下圖所示:
修改前:
修改后:
Step3:保存即可。
?
轉載于:https://www.cnblogs.com/yuanlb/archive/2013/04/18/3029238.html
總結
以上是生活随笔為你收集整理的EntiyFramework :Update model from database引起的两个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谈谈即时通讯开发平台
- 下一篇: 福布斯评科技未来五大趋势:电脑消失融入生