EF 6.0使用小计

时间:2023-03-08 18:27:15
EF 6.0使用小计

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

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

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

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

     <configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections> <entityFramework>
<contexts>
<context disableDatabaseInitialization="true" type="Hwapu.CTB.DAL.CTBContext">
</context>
</contexts>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</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 = });
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之后必须要声明对数据库的调用的引用。

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