2016-05-02 31 views
5

OVERVIEW
在EF6中使用Fitnesse,無法啓動。 我試過所有帖子中的每一個技巧,我可以找到。
所有的帖子都說要麼調用'RegisterProvider',要麼添加一個配置部分。兩者都沒有工作。我如何努力使用EntityFramework?

到目前爲止:
我在machine.config的DbProviderFactories部分中有「Effort.Provider」。 我有Effort.Provider,當我看着DbProviderFactories.GetFactoryClasses(); 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」,它和GetPropertyClass一樣也顯示在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> 
+0

我以爲它可能會進入Effort工廠,這似乎是Effort.Provider。EffortProviderFactory,並拋出一個異常,但似乎並非如此。 – BWhite

回答

6

看起來你需要註冊在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" /> 
+0

defaultConnection部分是我沒有的唯一部分。我會嘗試的。我沒有在那個方向上看起來太難,因爲我認爲這會給出一個不同的錯誤,而不是阻止創建類。其實我在構造函數中寫入控制檯。 我有充分的理由相信這個錯誤。它無法找到它。即使procmon顯示它閱讀努力庫。 – BWhite

+0

我有同樣的問題,但這個答案並沒有解決它。任何其他想法? – Jess

+1

我能想到的唯一另外一件事就是確保將以下部分作爲您的app.config中的元素的子元素< 確保不變量匹配EF中的invariantName提供者部分 –