使用Effort框架(版本1.1.4)对我的DB层进行单元测试时,我遇到了问题。
我有一个使用Entity Framework 6.1.3的DB层,模型是使用数据库创建的方法创建的,因此有一个描述该模型的*.edmx文件。
我创建了一个部分类来公开另一个构造函数,用于在单元测试中使用effort,就像这样:
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 Message: {"无法确定存储版本;需要有效的存储连接或版本提示。"}
我找到的其他帖子建议将*.edmx
文件中的ProviderManifestToken
属性从“2012”更改为“2008”。这似乎解决了问题,但在我第一次尝试在这里使用上下文时,却引发了另一个异常:
var entity = context.TableEntity.FirstOrDefault(i=> i.Id);
NotSupportedException:无法确定类型为“System.Data.EntityClient.EntityProviderFactory”的提供程序工厂的提供程序名称。请确保在应用程序配置中安装或注册ADO.NET提供程序。
有人知道如何解决这个问题,以便我可以使用Entity Framework 6.1.3 DB-first方法来使用Effort进行单元测试吗?
我已成功地使用Effort(版本1.1.4)来单元测试使用EF 4和EF 5创建的DB层,并采用DB-first方法。这就是为什么我认为EF版本可能会很有用的原因...
System.InvalidOperationException: 实体框架提供程序类型'MyProject.Tests.EffortProviderFactory, MyProject.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'没有名为'Instance'的静态属性或字段。实体框架提供程序必须声明一个名为'Instance'的静态属性或字段,该属性或字段返回提供程序的单例实例。
- Matt Koch