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

前端之家收集整理的这篇文章主要介绍了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();
    }

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

猜你在找的C#相关文章