EntityFrameworkで作業するにはどうすればよいですか?


質問

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

これまでのところ:
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"を使用すると、Machine.configだけでなくGetFactoryClassesにも表示されます。

使用方法:
ウィンドウズ10
.Net 4.6
VS2016
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
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ