c# - 如何让 Effort 与 EntityFramework 一起工作?

标签 c# entity-framework effort

概述
将 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”,它会像 machine.config 一样显示在 GetFactoryClasses 中。

使用:
Windows 10
.Net 4.6
对比 2016
EF 6.1.2(虽然它说安装了 6.1.3,但不确定那是什么意思)

我需要注册一个 DLL 什么的吗?有关说明中没有任何内容。

更多详情:
应用配置

<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" />

关于c# - 如何让 Effort 与 EntityFramework 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36985863/

相关文章:

c# - MongoDB C# 驱动程序 : create document if not exists

c# - 检测字符串是否有小数

visual-studio - 在 Visual Studio 2010 中编辑 Entity Framework EDMX 模型时,如何将所有实体折叠为标题?

c# - 努力单元测试 : Argument 'xmlReader' is not valid

c# - XML 的 Saml2Assertion 为空

c# - C# 中的扩展 ASCII

c# - 一个 DbContext Instance 跨越多个 Repositories

entity-framework - Entity Framework 和字符串键之间的关联

entity-framework - 无论如何,我是否可以将数据加载到内存中,而不是使用 .csv 文件来进行单元测试?

c# - 在 Effort 数据库上创建存储过程以进行单元测试