ASP.NET+MVC+EF6.0项目部署时BUG实录

        所维护的随访系统,基于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;

     试了下,果然可以部署正常,又学了一招哦!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章