2016-05-02 5 views
5

概要
EF6でFitnesseを使用すると、作業を開始できません。 私は見つけることができるすべての記事のすべてのトリックを試みました。
すべての投稿は、「RegisterProvider」を呼び出すか、または設定セクションを追加すると言っています。どちらもうまくいきません。EntityFrameworkで作業するにはどうすればよいですか?

これまで通り:
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 

のいずれか:
"Effort.Provider" Runner.exe.configのentityFrameworkセクションではなく得ることができませんでしたそれは働くこと。ちょうどアプリをクラッシュした。
EFとEffort.EF6をアンインストールしてから再インストールしてください。目に見える効果はありません。
Effort.Provider.EffortProviderConfiguration.RegisterProvider()を呼び出します。クラスコンストラクタやさまざまなスタートアップロケーションから取得できます。 Effort.ProviderはDbProviderFactories.GetFactoryClasses()に表示されませんでした。
app.configのDbProviderFactoriesセクションの「Effort.Provider」を使用すると、machine.configだけでなくGetFactoryClassesにも表示されます。

使用:私は登録して
の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" 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> 

あなたのコードでは、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と一致することを確認してくださいプロバイダーのセクション –

関連する問題