如何讓Effort與EntityFramework一起使用?

c# effort entity-framework

概述
使用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]);   

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

還嘗試過:
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中

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

熱門答案

看起來您需要在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類型的對象,請創建一個。

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

我還建議在app.config中設置connectionString。我相信對CreateTransient的調用會為您創建一個連接,但如果您測試的代碼具有在某處創建另一個dbContext的代碼,Effort將查找app.config以獲取該信息。下面是一個創建瞬態數據庫的示例,以便在一次測試中完成的所有操作不會影響另一個測試。

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



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因