C# · 12月 29, 2021

c# – 努力单元测试实体框架6.1.3 DB-first

使用Effort框架(版本1.1.4)来单元测试我的DB层时遇到问题.

我有一个使用实体框架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”);

{“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.

任何人都知道如何解决这个问题,所以我可以用实体框架的努力6.1.3 DB-first方法?

我已经成功地使用了努力(1.1.4版),以DB-first方法在EF 4和EF 5中创建的单元测试DB层,这就是为什么我认为EF版本可以感兴趣…

解决方法 我的同事找到了解决我的问题!

显然,我正在使用“努力”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(); }

这解决了我的问题.希望可以为他人提供一些帮助!