我在使用 Effort 框架(版本 1.1.4)对我的 DB 层进行单元测试时遇到问题。
我有一个使用实体框架 6.1.3 的数据库层,并且模型是使用数据库优先方法创建的,因此有一个*.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 消息:{“无法确定存储版本;需要有效的存储连接或版本提示。”}
我发现的其他帖子建议将文件ProviderManifestToken
中的属性*.edmx
从“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)对在 EF 4 和 EF 5 中使用 DB 优先方法创建的 DB 层进行单元测试——这就是为什么我认为 EF 版本可能会引起人们的兴趣......