至今:@H_502_2@我在machine.config的DbProviderFactories部分中有“Effort.Provider”.@H_502_2@当我看到DbProviderFactories.GetFactoryClasses()时,我有Effort.Provider出现;@H_502_2@ProcMon显示它正在寻找并找到Effort.dll.
结果:@H_502_2@任何
DbConnectionFactory.CreateTransient(); Effort.EntityConnectionFactory.CreateTransient(connectionString); DbProviderFactory dataFactory = DbProviderFactories.GetFactory(dt.Rows[5]);
扔
Effort.Exceptions.EffortException: The Effort library Failed to register
还尝试过:@H_502_2@Runner.exe.config的entityFramework部分中的“Effort.Provider”但无法使其工作.刚崩溃的应用程序.@H_502_2@卸载EF和Effort.EF6并重新安装.没有明显的效果.@H_502_2@调用Effort.Provider.EffortProviderConfiguration.RegisterProvider();从类构造函数和各种启动位置. Effort.Provider从未出现在DbProviderFactories.GetFactoryClasses();@H_502_2@使用app.config中DbProviderFactories部分中的“Effort.Provider”,它显示在GetFactoryClasses中,与machine.config一样.
使用:@H_502_2@Windows 10@H_502_2@.Net 4.6@H_502_2@VS 2016@H_502_2@EF 6.1.2(尽管安装了6.1.3,但不确定这意味着什么)
我是否需要注册DLL或其他内容?关于那个的说明中没有任何内容.
更多细节:@H_502_2@App.config中
<configuration> <runtime> <loadFromRemoteSources enabled="true"/> </runtime> <system.data> <DbProviderFactories> <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" /> </DbProviderFactories> </system.data> </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> <providers> <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices,Effort" /> </providers> </entityFramework>
然后在您的代码中创建Effort连接并将其传递给您的DbContext.如果您还没有构造函数接受System.Data.Common.DbConnection类型的对象,请创建一个.
System.Data.Common.DbConnection connection = DbConnectionFactory.CreateTransient(); var context = new MyContext(connection);
我还建议在app.config中设置connectionString.我相信对CreateTransient的调用会为您创建一个连接,但如果您测试的代码具有在某处创建另一个dbContext的代码,Effort将查找app.config以获取该信息.下面是一个创建瞬态数据库的示例,以便在一次测试中完成的所有操作不会影响另一个测试.
<add name="DefaultConnection" connectionString="Data Source=in-process;IsTransient=true" providerName="Effort.Provider" />