我有问题。我想隐藏在单独的程序集中访问数据库的所有逻辑。但是,第一次调用数据库时,应用程序崩溃并出现错误
“EntityFramework.dll中出现”System.InvalidOperationException“类型的异常,但未在用户代码中处理
有关更多信息:对于具有不可更改名称“System.Data.SqlClient”的ADO.NET提供程序未找到提供程序实体框架。确保供应商已在“entityFramework”应用程序配置文件部分中注册。有关更多信息,请参阅。第http://go.microsoft.com/fwlink/?LinkId=260882页。 “
依赖程序集的配置文件中指定的所有供应商和连接字符串。在msdn中,我读到必须在配置可执行程序集中注册所有配置。但在这种情况下,必须在主组件中拉出EF,这不应该是
其实这个问题。如何将Ef配置用于依赖程序集?
答案 0 :(得分:1)
如链接到MSDN所述,配置应驻留在可执行应用程序(web.config,app.config)中。 您的类库只包含代码,从可执行项目引用时,只复制和使用.dll文件。因此,即使您在类库项目的app.config中填充了未使用数据的配置。
另一方面,您唯一需要做的就是在可执行配置文件中包含配置信息。如果您不需要,则无需在那里引用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>