【发布时间】:2016-04-07 13:33:35
【问题描述】:
我正在尝试使用 Entity Framework 6 为我的 ASP.NET MVC 应用程序运行集成测试。
我得到的错误是
System.Data.Entity.Core.EntityException:底层提供程序在回滚时失败。 ---> System.ArgumentNullException:值不能为空。
参数名称:连接
代码如下所示:
Database.SetInitializer(new PrimaryInitializerTest());
_context = new PrimaryContextTest();
_context.Database.Initialize(true);
using (var dbt = _context.Database.BeginTransaction())
{
dbt.Commit();
dbt.Rollback();
}
我还尝试在 using 语句下方调用 dbt.UnderlyingTransaction.Connection.Open(),在调用 Rollback() 下方调用 dbt.UnderlyingTransaction.Connection.Close()。这给了我错误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 文件夹中不存在数据库...
【问题讨论】:
-
错误究竟是什么时候发生的?什么时候启动应用?
-
当我运行测试时,程序执行回滚功能。如果有帮助,这里是变量i.imgur.com/ObGGgww.png
-
虽然我不确定你为什么会得到一个空引用异常,但
Commit然后立即Rollback一个事务并没有意义。这绝对是一个错误(SQL Server 也会抛出一个错误),虽然它不应该是一个空错误。 -
我不熟悉与这样的实体合作。 context.Save() 方法中的更改是否实际保存?我以为它们只是以某种方式被缓存了。
-
因为当我调用 Rollback() 时,我没有看到数据库变量发生变化。我没有看到它恢复了我添加到数据库中的项目。
标签: c# sql-server asp.net-mvc entity-framework-6