努力単位テストエンティティフレームワーク6.1.3 DBファースト


質問

Effortフレームワーク(バージョン1.1.4)を使用してDBレイヤーをテストする際に問題が発生しています。

私はエンティティのフレームワーク6.1.3を使用してDB層を持っており、そのモデルはデータベースを最初に使って作成されているので、モデルを記述する*.edmxファイルがあります。

私はユニットテストで使用される追加のコンストラクタを次のような努力で公開するために部分クラスを作成しました:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

単純な単体テストは次のようになります。

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

ユニットテストを実行すると、次の行に対して例外がスローされます。

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

{"プロバイダはProviderManifestインスタンスを返しませんでした。}} InnerExceptionメッセージ:{"ストレージバージョンを判断できませんでした。有効なストレージ接続またはバージョンヒントが必要です。

私が見つけた他の投稿は、 *.edmxファイルのProviderManifestToken属性を "2012"から "2008"に変更することを示唆していProviderManifestToken 。これは問題を解決するように思われますが、ここで初めてコンテキストを使用しようとすると、別の例外があります。

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

NotSupportedException 'System.Data.EntityClient.EntityProviderFactory'タイプのプロバイダファクトリのプロバイダ名を特定できません。 ADO.NETプロバイダがアプリケーションの設定にインストールまたは登録されていることを確認します。

誰もがこの問題を解決する方法を知っているので、エンティティフレームワーク6.1.3のDBファーストアプローチでEffortを使用できますか?

私は、EF 4とEF 5で作成されたユニットテストのDBレイヤーをDB最初のアプローチでうまく使用することができました。これがEFバージョンが興味深いと思われる理由です...

受け入れられた回答

私の同僚が私の問題の解決策を見つけました!

どうやら私は "Effort.EF6"ナゲットパッケージの代わりに "Effort"ナゲットパッケージを使用していました。他のものをアンインストールしてインストールした後も、私のApp.Configをタグで更新する必要がありました:

  <system.data>
    <DbProviderFactories>
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />  
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
    </providers>
  </entityFramework>

そして私は、努力プロバイダーを登録する私の単体テストのためのSetUpの呼び出しも含めました:

  <system.data>
    <DbProviderFactories>
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />  
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
    </providers>
  </entityFramework>

これは私のための問題を解決しました。うまくいけば、それは他人にいくらか助けを与えることができます!





ライセンスを受けた: CC-BY-SA
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ