gpt4 book ai didi

c# - EntityFramework 测试初始化​​错误 : CREATE DATABASE statement not allowed within multi-statement transaction

转载 作者:可可西里 更新时间:2023-11-01 08:43:01 25 4
gpt4 key购买 nike

我正在尝试构建一个快速测试,每次运行时都会删除并重新创建数据库。我有以下内容:

[TestClass]
public class PocoTest
{
private TransactionScope _transactionScope;
private ProjectDataSource _dataSource;
private Repository _repository = new Repository();
private const string _cstring = "Data Source=.;Initial Catalog=test_db;Trusted_Connection=True";

[TestInitialize]
public virtual void TestInitialize()
{
_dataSource = new ProjectDataSource(_cstring);
_dataSource.Database.Delete();
_dataSource.Database.CreateIfNotExists();
_transactionScope = new TransactionScope();
}
[TestMethod]
public void TestBasicOperations()
{
var item = _repository.AddItem(new Item(){Details = "Test Item"});
// AddItem makes a call through the data context to add a set and then calls datacontext.SaveChanges()
}


[TestCleanup]
public void TestCleanup()
{
// rollback
if (_transactionScope != null)
{
_transactionScope.Dispose();
}
}

但是,当我运行测试时,出现以下错误:

Result Message: Test method Project.Repository.UnitTests.PocoTest.TestBasicOperations threw exception: System.Data.SqlClient.SqlException: CREATE DATABASE statement not allowed within multi-statement transaction.

项目数据源在这里:

public class ProjectDataSource : DbContext, IProjectDataSource
{

public ProjectDataSource() : base("DefaultConnection")
{

}

public ProjectDataSource(string connectionString) : base(connectionString)
{

}

public DbSet<Set> Sets { get; set; }
}

存储库:

public class Repository : IRepository
{
private readonly ProjectDataSource _db = new ProjectDataSource();
public Item AddItem(Item item)
{
_db.Items.Add(item);
_db.SaveChanges();
return item;
}
}

为什么会这样?

此外 - 如果它有任何区别 - 如果我在 TestMethod 中注释掉 AddItem 行,则不会发生错误。

最佳答案

您还可以使用 db.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);

参见 https://stackoverflow.com/a/24344654/375114详情

关于c# - EntityFramework 测试初始化​​错误 : CREATE DATABASE statement not allowed within multi-statement transaction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15168616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com