[英]Effort unit testing Entity framework 6.1.3 DB-first
使用Effort框架(版本1.1.4)對我的數據庫層進行單元測試時遇到問題。
我有一個使用Entity framework 6.1.3的DB層,並且使用數據庫優先方法創建模型,因此有一個描述模型的*.edmx
文件。
我創建了一個部分類來公開單元測試使用的額外構造函數,如下所示:
public partial class Entities
{
public Entities(DbConnection connection)
: base(connection, true)
{
}
}
簡單的單元測試如下所示:
private Entities CreateContext()
{
//var connectionString = ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
//var connection = Effort.EntityConnectionFactory.CreateTransient(connectionString);
//return new Entities(connection as DbConnection);
var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities");
var context = new Entities(connection);
return context;
}
[TestMethod]
public void Testing_Effort_Integration()
{
using (var context = CreateContext())
{
var entity = context.TableEntity.FirstOrDefault(i=> i.Id);
Assert.IsNotNull(entity);
}
}
當我運行單元測試時,它會拋出一行異常:
var connection = Effort.EntityConnectionFactory.CreatePersistent("name=Entities");
{“提供程序未返回ProviderManifest實例。”} InnerException消息:{“無法確定存儲版本;需要有效的存儲連接或版本提示。”}
我發現的其他帖子建議將*.edmx
文件中的ProviderManifestToken
屬性從“2012”更改為“2008”。 這似乎解決了這個問題,但是在嘗試第一次使用上下文時,又給出了另一個例外:
var entity = context.TableEntity.FirstOrDefault(i=> i.Id);
NotSupportedException無法確定“System.Data.EntityClient.EntityProviderFactory”類型的提供程序工廠的提供程序名稱。 確保在應用程序配置中安裝或注冊了ADO.NET提供程序。
任何人都知道如何解決這個問題所以我可以使用Effort實體框架6.1.3 DB-first方法?
我已經成功地使用Effort(版本1.1.4)來使用DB-first方法對在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中調用了我的單元測試來注冊工作提供者:
[SetUp]
public void Setup()
{
EffortProviderConfiguration.RegisterProvider();
}
這解決了我的問題。 希望它可以為他人提供一些幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.