如何努力使用EntityFramework?

时间:2016-05-02 15:15:54

标签: c# entity-framework effort

概览
使用Fitnesse和EF6,无法启动Effort。 我在所有可以找到的帖子中尝试了每一个技巧 所有帖子都说要么调用“RegisterProvider”,要么添加配置部分。两者都没有。

到目前为止:
我有" Effort.Provider"在machine.config中的DbProviderFactories部分。 当我看到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

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

1 个答案:

答案 0 :(得分:8)

看起来您需要在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" />