所維護的隨訪系統,基於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;
試了下,果然可以部署正常,又學了一招哦!!!