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;

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

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