努力单元测试 Entity framework 6.1.3 DB-first
Effort unit testing Entity framework 6.1.3 DB-first
我在使用 Effort 框架(版本 1.1.4)对我的 DB 层进行单元测试时遇到问题。
我有一个使用 Entity framework 6.1.3 的 DB 层,并且模型是使用数据库优先方法创建的,因此有一个描述模型的 *.edmx
文件。
我创建了一个部分 class 来公开单元测试使用的额外构造函数,如下所示:
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");
{"The provider did not return a ProviderManifest instance."}
InnerException Message: {"Could not determine storage version; a valid
storage connection or a version hint is required."}
我发现的其他帖子建议将 *.edmx
文件中的 ProviderManifestToken
属性从“2012”更改为“2008”。这似乎解决了问题,但在此处首次尝试使用上下文时却给了我另一个例外:
var entity = context.TableEntity.FirstOrDefault(i=> i.Id);
NotSupportedException Unable to determine the provider name for
provider factory of type
'System.Data.EntityClient.EntityProviderFactory'. Make sure that the
ADO.NET provider is installed or registered in the application config.
任何人都知道如何解决这个问题,这样我就可以将 Effort 与 entity framework 6.1.3 DB 优先方法一起使用?
我已经成功地使用 Effort(版本 1.1.4)通过 DB 优先方法对在 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]
public void Setup()
{
EffortProviderConfiguration.RegisterProvider();
}
这解决了我的问题。希望能对其他人有所帮助!
我在使用 Effort 框架(版本 1.1.4)对我的 DB 层进行单元测试时遇到问题。
我有一个使用 Entity framework 6.1.3 的 DB 层,并且模型是使用数据库优先方法创建的,因此有一个描述模型的 *.edmx
文件。
我创建了一个部分 class 来公开单元测试使用的额外构造函数,如下所示:
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");
{"The provider did not return a ProviderManifest instance."} InnerException Message: {"Could not determine storage version; a valid storage connection or a version hint is required."}
我发现的其他帖子建议将 *.edmx
文件中的 ProviderManifestToken
属性从“2012”更改为“2008”。这似乎解决了问题,但在此处首次尝试使用上下文时却给了我另一个例外:
var entity = context.TableEntity.FirstOrDefault(i=> i.Id);
NotSupportedException Unable to determine the provider name for provider factory of type 'System.Data.EntityClient.EntityProviderFactory'. Make sure that the ADO.NET provider is installed or registered in the application config.
任何人都知道如何解决这个问题,这样我就可以将 Effort 与 entity framework 6.1.3 DB 优先方法一起使用?
我已经成功地使用 Effort(版本 1.1.4)通过 DB 优先方法对在 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]
public void Setup()
{
EffortProviderConfiguration.RegisterProvider();
}
这解决了我的问题。希望能对其他人有所帮助!