Value cannot be null: connection while testing database

本秂侑毒 提交于 2019-12-01 15:16:37

问题


I'm trying to run integration tests for my ASP.NET MVC application using Entity Framework 6.

The error I get is

System.Data.Entity.Core.EntityException: The underlying provider failed on Rollback. ---> System.ArgumentNullException: Value cannot be null.
Parameter name: connection

The code looks like this:

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

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

I also tried having an dbt.UnderlyingTransaction.Connection.Open() call just below the using statement, and a dbt.UnderlyingTransaction.Connection.Close() call just below the call to Rollback(). That gave me the error Connection is not closed.

PrimaryInitializerTest class

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

PrimaryContextTest class

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

Connection string

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

Context string

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

What could I be doing wrong?

Might mention that the database doesn't exist in the App_Data folder...


回答1:


You're calling Commit and then Rollback, but the comments point that mistake out.

The error isn't very intuitive, I mean, an ArgumentNullException should never work its way out of an SDK from down the stack.

But I've had this when I've accidentally reused the same transaction instance, or called Commit twice, or tried to rollback twice in layered error recovery logic.



来源:https://stackoverflow.com/questions/34582668/value-cannot-be-null-connection-while-testing-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!