当前位置:  开发笔记 > 编程语言 > 正文

值不能为null:测试数据库时的连接

如何解决《值不能为null:测试数据库时的连接》经验,为你挑选了1个好方法。

我正在尝试使用Entity Framework 6为我的ASP.NET MVC应用程序运行集成测试.

我得到的错误是

System.Data.Entity.Core.EntityException:基础提供程序在Rollback上失败.---> System.ArgumentNullException:Value不能为null.
参数名称:连接

代码如下所示:

Database.SetInitializer(new PrimaryInitializerTest());
_context = new PrimaryContextTest();
_context.Database.Initialize(true);

using (var dbt = _context.Database.BeginTransaction())
{
     dbt.Commit();
     dbt.Rollback();
}

我也尝试dbt.UnderlyingTransaction.Connection.Open()在using语句dbt.UnderlyingTransaction.Connection.Close()下方进行调用,并在调用之下调用Rollback().这给了我错误Connection is not closed.

PrimaryInitializerTest

protected override void Seed(PrimaryContextTest context)
{
    // (...) Input some values
    base.Seed(context);
}

PrimaryContextTest

public class PrimaryContextTest : DbContext
{
    public PrimaryContextTest() : base("PrimaryContextTest")
    {
        Database.SetInitializer(new DropCreateDatabaseAlways());
    }

    public DbSet Stories { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove();
        modelBuilder.Conventions.Remove();
    }
}

连接字符串


上下文字符串


    

我能做错什么?

可能会提到App_Data文件夹中不存在数据库...



1> Luke Puplett..:

您先打Commit,然后打Rollback,但是注释指出了这个错误。

该错误不是很直观,我的意思是,ArgumentNullException永远不要从堆栈中退出SDK。

但是,当我不小心重用同一事务实例,或者调用了Commit两次,或者试图在分层错误恢复逻辑中回滚两次时,就遇到了这种情况。

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有