微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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();
    }

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐