我正在尝试使用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
文件夹中不存在数据库...
您先打Commit
,然后打Rollback
,但是注释指出了这个错误。
该错误不是很直观,我的意思是,ArgumentNullException
永远不要从堆栈中退出SDK。
但是,当我不小心重用同一事务实例,或者调用了Commit
两次,或者试图在分层错误恢复逻辑中回滚两次时,就遇到了这种情况。