我正在尝试使用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
文件夹中不存在数据库...
答案 0 :(得分:3)
您正在呼叫Commit
然后Rollback
,但是评论指出了这个错误。
错误并不是非常直观,我的意思是,ArgumentNullException
永远不会从堆栈中的SDK中解脱出来。
但是当我意外地重复使用相同的事务实例,或者两次调用Commit
,或者尝试在分层错误恢复逻辑中回滚两次时,我已经有了这个。