所维护的随访系统,基于ASP.NET+MVC+EF6.0,每每从数据库更新完实体后,运行时报“错误 0152: 未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序
的实体框架提供程序。请确保在应用程序配置文件的“entityFramework”节中注册了该提供程序。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882。"
1)看了下WEB项目的配置文件确实不包括名为“entityFramework”的配置节信息。查看了项目,BLL层有对EF的引用,查看其配置文件,名为“entityFramework”的配置节
信息,将其信息拷贝到WEB项目的配置文件后,如下:
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
2)添加完之后运行程序,报以下出错提示: “无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类
型“System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer”。请确保使用限定程序集的名称且该程序集对运行的应用程序可用。有关详细信息,请参阅
http://go.microsoft.com/fwlink/?LinkId=260882。“
看描述,为Web项目添加EntityFramework.dll和EntityFramework.SqlServer.dll的引用,尝试了下,果然OK。
至此,问题得到解决。
事后,与同事交流,他说这是EF部署的一个BUG,某个DLL拷贝不到WEB项目的bin文件夹下,可以在EF的上下文代码CS文件(Model1.Context.cs)的构造函数方法中添
加如下代码即可:
var ensureDLLIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
试了下,果然可以部署正常,又学了一招哦!!!