努力單元測試實體框架6.1.3 DB-first

c# effort entity-framework unit-testing

使用Effort框架(版本1.1.4)對我的數據庫層進行單元測試時,我遇到了問題。

我有一個使用Entity framework 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”。這似乎解決了這個問題,但是在嘗試第一次使用上下文時,又給出了另一個例外:

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

NotSupportedException無法確定類型為“System.Data.EntityClient.EntityProviderFactory”的提供程序工廠的提供程序名稱。確保在應用程序配置中安裝或註冊了ADO.NET提供程序。

任何人都知道如何解決這個問題所以我可以使用Effort實體框架6.1.3 DB-first方法?

我已成功地使用Effort(版本1.1.4)以數據庫優先方法對在EF 4和EF 5中創建的DB層進行單元測試 - 這就是為什麼我認為EF版本可能會引起關注...

一般承認的答案

我的一位同事找到了我的問題的解決方案!

顯然我使用的是“Effort”nuget包而不是“Effort.EF6”nuget包。卸載並安裝另一個後,我還必須使用標籤更新我的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 with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因