>我有一个问题。我想将访问数据库的所有逻辑隐藏在一个单独的程序集中。但是,第一次调用数据库时,应用程序崩溃并显示错误
"System.InvalidOperationException"类型的异常出现在EntityFramework.dll中,但它未在用户代码中处理
有关详细信息:对于名称不可更改的提供程序"System.Data.SqlClient"ADO.NET 找不到提供程序实体框架。确保供应商已在"实体框架"应用程序配置文件部分中注册。有关详细信息,请参阅。第 http://go.microsoft.com/fwlink/?LinkId=260882 页。">
从属程序集的配置文件中指定的所有供应商和连接字符串。在 msdn 中,我读到所有配置都必须在配置可执行程序集中注册。但是在这种情况下,有必要在主程序集中拉动EF,这不应该
其实是问题。如何将 Ef 配置用于依赖程序集?
如 MSDN 链接中所述,配置应驻留在可执行应用程序(web.config、app.config(中。类库仅包含代码,当从可执行项目引用时,仅复制和使用.dll文件。因此,即使您在类库项目的 app.config 中填写配置,也不会使用该数据。
另一方面,您唯一需要做的就是在可执行配置文件中包含配置信息。如果不需要 EF,则无需在此处引用 EF。想想看,好像你自己的dll需要一些配置才能存在于配置文件中,在这种情况下是EF部分,但可能是任何其他东西。
您的配置文件应如下所示:
<configuration>
<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>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
<connectionStrings>
<add name="DefaultConnection" connectionString="..." providerName="System.Data.SqlClient" />
</connectionStrings>
...
</configuration>