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

时间:2016-01-03 23:06:02

标签: c# sql-server asp.net-mvc entity-framework-6

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

我得到的错误是

  

System.Data.Entity.Core.EntityException:基础提供程序在回滚时失败。 ---> System.ArgumentNullException:值不能为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()通话,并在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<PrimaryContextTest>());
    }

    public DbSet<Story> Stories { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Conventions.Remove<IncludeMetadataConvention>();
    }
}

连接字符串

<add name="PrimaryContextTest" 
     connectionString="Data Source=(LocalDb)\mssqllocaldb;Initial Catalog=PrimaryContextTest;Integrated Security=SSPI;AttachDbFilename=|DataDirectory|\PrimaryContextTest.mdf" 
     providerName="System.Data.SqlClient" />

上下文字符串

<context type="fcon.DAL.Tests.PrimaryContextTest, fcon, Version=1.0.0.0, Culture=neutral">
    <databaseInitializer type="fcon.DAL.Tests.PrimaryInitializerTest, fcon" />
</context>

我可能做错了什么?

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

1 个答案:

答案 0 :(得分:3)

您正在呼叫Commit然后Rollback,但是评论指出了这个错误。

错误并不是非常直观,我的意思是,ArgumentNullException永远不会从堆栈中的SDK中解脱出来。

但是当我意外地重复使用相同的事务实例,或者两次调用Commit,或者尝试在分层错误恢复逻辑中回滚两次时,我已经有了这个。