EntiyFramework :Update model from database引起的两个问题
EntiyFramework一大特點(diǎn)就是Code first,但難免有時(shí)候因特殊原因需要Update model from database。此次使用該功能時(shí)遇到兩個(gè)問(wèn)題,且記之。
[問(wèn)題一]
Error 3027: No mapping specified for the following EntitySet/AssociationSet - XXXXXXX.
[起因]
在數(shù)據(jù)庫(kù)新建一張表,并使用Update model from database功能同步到EF, Add Association后,發(fā)生該錯(cuò)誤。
[說(shuō)明]
XXXXXXX代表關(guān)系名稱,例如一個(gè)外鍵關(guān)系:FK_Bug_TestCase。
[原因]
在EF中Add Association時(shí),.edmx文件并未被同步創(chuàng)建。
[解決方案]
Step1:右鍵.edmx文件,以XML Editor方式打開(kāi),如下圖:
Step2:ctrl+F 搜索,找到名稱為XXXXXXX的Asscoiation節(jié)點(diǎn),以FK_Bug_TestCase為例,并添加<ReferentialConstraint></ReferentialConstraint>節(jié)點(diǎn),并設(shè)置Principal的Role屬性為主鍵表名,子節(jié)點(diǎn)PropertyRef的Name屬性為主鍵表用作外鍵的字段名;設(shè)置Dependent的Role屬性為外鍵表名,? 子節(jié)點(diǎn)PropertyRef的Name為外鍵字段名。如下圖所示:
Step3:保存即可。
?
[問(wèn)題二]
? 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.
[起因]
在問(wèn)題一已解決的前提下,對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新是引起。
[原因]
使用Update model from database功能時(shí),EF在.edmx文件里創(chuàng)建了< DefiningQuery ></ DefiningQuery >節(jié)點(diǎn)。DefiningQuery 節(jié)點(diǎn)的作用,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:同問(wèn)題一Step1,以XML Editor方式打開(kāi).edmx文件。
Step2:ctrl+F 搜索,找到名稱為DefiningQuery的節(jié)點(diǎn)(其實(shí)一眼就可以看出來(lái)它所在EntitySet跟別的EntitySet的不同,用的時(shí)候就看到了),并刪除。此外對(duì)其所在EntitySet節(jié)點(diǎn)的Store:Schema屬性的Store:命名空間去掉,并刪除Store:Name屬性。如下圖所示:
修改前:
修改后:
Step3:保存即可。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yuanlb/archive/2013/04/18/3029238.html
總結(jié)
以上是生活随笔為你收集整理的EntiyFramework :Update model from database引起的两个问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 谈谈即时通讯开发平台
- 下一篇: 福布斯评科技未来五大趋势:电脑消失融入生