EF 6.0使用小计

---恢复内容开始---

最近尝试了下EF Extended,但是居然需要EF6.0以上,没办法,只能安装了,打开解决方案,选择库程序包管理下的程序包管理控制台(或者直接右击你需要使用扩展的解决方案选管理NuGet程序包),也不废话了,直接装上。

 

使用简单的三层结果,在DAL层装上了extended扩展,点开引用一看,好家伙,引入了三个dll,一个是EntityFramework,一个EntityFramework.Extended,一个是EntityFramework.SqlServer,没弄明白他为啥需要引入.SqlServer?

 

用EF PowerTools工具生成了Model,在web层处理好了config,如下

 1     <configSections>
 2         <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 3     </configSections>
 4 
 5   <entityFramework>
 6     <contexts>
 7       <context disableDatabaseInitialization="true" type="Hwapu.CTB.DAL.CTBContext">
 8       </context>
 9     </contexts>
10     <providers>
11       <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
12     </providers>
13   </entityFramework>

开始处理批量更新了,随便写了一个

using (CTBContext db = new CTBContext())
{
        //var topicList = db.TUserWrongTopics.Where(r => r.TopicId == topicId);
        //int state = db.TUserWrongTopics.Update(topicList, u => new TUserWrongTopic { IsDelete = 1 });//Method 1 Obsolete
        //int state = db.TUserWrongTopics.Update(q => q.TopicId == topicId, q => new TUserWrongTopic { IsDelete = 1 });//Method 2 Obsolete
        int state = db.TUserWrongTopics.Where(r => r.TopicId == topicId).Update(r => new Model.TUserWrongTopic { IsDelete = 1 });
        return state;
}

最后执行的时候居然报错,在实例化Context的时候居然说没有找到注册需要的ADO.NET 的SqlClient,奇怪,后面找了相关资料,发现需要在web层重新引用一下EntityFramework.SqlServer,奇怪,不知道这是VS的bug还是什么,在DAL层不是应用了吗,还需要重新引用一次?

后面用自己的dll测试了一下,发现无论在哪个地方调用。都能够正常,不需要在web层重新引入,奇怪的问题。难道EF6不再加入.net framework之后就必须在调用的地方引入SqlServer?在5.0时是不需要引入Sql,升级之后EF添加了对Oracle,mySql,DB2之后必须要声明对数据库的调用的引用。

---恢复内容结束---

posted @ 2014-10-22 11:05  简单Show  阅读(859)  评论(0编辑  收藏  举报