加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何让Effort与EntityFramework一起使用?

发布时间:2020-12-15 08:14:28 所属栏目:百科 来源:网络整理
导读:概述 使用Fitnesse和EF6,无法启动Effort. 我已经尝试了所有可以找到的帖子中的每一个技巧. 所有帖子都说要么叫’RegisterProvider’,要么添加一个配置部分.两者都不起作用. 至今: 我在machine.config的DbProviderFactories部分中有“Effort.Provider”. 当
概述
使用Fitnesse和EF6,无法启动Effort.
我已经尝试了所有可以找到的帖子中的每一个技巧.
所有帖子都说要么叫’RegisterProvider’,要么添加一个配置部分.两者都不起作用.

至今:
我在machine.config的DbProviderFactories部分中有“Effort.Provider”.
当我看到DbProviderFactories.GetFactoryClasses()时,我有Effort.Provider出现;
ProcMon显示它正在寻找并找到Effort.dll.

结果:
任何

DbConnectionFactory.CreateTransient();   
Effort.EntityConnectionFactory.CreateTransient(connectionString);   
DbProviderFactory dataFactory = DbProviderFactories.GetFactory(dt.Rows[5]);

Effort.Exceptions.EffortException: The Effort library failed to register

还尝试过:
Runner.exe.config的entityFramework部分中的“Effort.Provider”但无法使其工作.刚崩溃的应用程序.
卸载EF和Effort.EF6并重新安装.没有明显的效果.
调用Effort.Provider.EffortProviderConfiguration.RegisterProvider();从类构造函数和各种启动位置. Effort.Provider从未出现在DbProviderFactories.GetFactoryClasses();
使用app.config中DbProviderFactories部分中的“Effort.Provider”,它显示在GetFactoryClasses中,与machine.config一样.

使用:
Windows 10
.Net 4.6
VS 2016
EF 6.1.2(尽管安装了6.1.3,但不确定这意味着什么)

我是否需要注册DLL或其他内容?关于那个的说明中没有任何内容.

更多细节:
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>

解决方法

看起来您需要在app.config文件中注册“entityFramework”配置部分.
<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" />

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读