Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 值不能为null:测试数据库时连接_C#_Sql Server_Asp.net Mvc_Entity Framework 6 - Fatal编程技术网

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

C# 值不能为null:测试数据库时连接,c#,sql-server,asp.net-mvc,entity-framework-6,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 PrimaryContex

我正在尝试使用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();
}
我还尝试在using语句的正下方调用
dbt.underyingTransaction.Connection.Open()
,在调用
Rollback()的正下方调用
dbt.underyingTransaction.Connection.Close()
。这给了我错误
连接未关闭

PrimaryInitializerTest
class

protected override void Seed(PrimaryContextTest context)
{
    // (...) Input some values
    base.Seed(context);
}
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>();
    }
}
PrimaryContextTest
class

protected override void Seed(PrimaryContextTest context)
{
    // (...) Input some values
    base.Seed(context);
}
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>();
    }
}
公共类PrimaryContextTest:DbContext { public PrimaryContextTest():base(“PrimaryContextTest”) { SetInitializer(新的DropCreateDatabaseAlways()); } 公共数据库集故事{get;set;} 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); modelBuilder.Conventions.Remove(); } }
连接字符串

<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\u Data
文件夹中…

您正在调用
Commit
,然后调用
Rollback
,但注释指出错误

这个错误不是很直观,我的意思是,
ArgumentNullException
永远不会从SDK堆栈中退出


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

错误到底是什么时候发生的?当你启动应用程序时?当我运行测试,程序执行回滚功能时。下面是变量,如果它有帮助的话,尽管我不确定为什么会出现空引用异常,但是
Commit
然后立即
Rollback
事务实际上是没有意义的。这肯定是一个错误(SQLServer也会抛出一个错误),但它不应该是空错误。我对这样的实体还不熟悉。context.Save()方法中的更改是否已实际保存?我以为它们只是被缓存了,因为当我调用Rollback()时,我没有看到数据库变量的变化。我没有看到它还原我添加到数据库中的项。