【发布时间】:2015-10-12 13:30:13
【问题描述】:
我正在编写一些集成测试,用于测试与 MS SQL Server 数据库对话的 .NET 网站的数据访问层。
我正在使用 TransactionScope 来回滚测试期间所做的任何更改,如下所示:
public class DatabaseFixture
{
private TransactionScope _transactionScope;
[SetUp]
public void SetUp()
{
_transactionScope = new TransactionScope(TransactionScopeOption.Required);
}
[TearDown]
public void TearDown()
{
_transactionScope.Dispose();
}
}
我想知道我在 INSERT 语句中添加的行的 ID,因此我的查询看起来像这样 insert into Exercises (Name) Values (@Name); SELECT SCOPE_IDENTITY();。
添加 TransactionScope 后,SCOPE_IDENTITY() 不再返回正确的值。它总是返回 1,即使该行可能是 id 3 或 4。我猜这与未提交事务有关。
SCOPE_IDENTITY() 不是正确的方法吗?
【问题讨论】:
-
你能试试@@IDENTITY吗?
-
你能显示实际执行 SQL 的代码吗?
-
这个问题完全可以关闭!希望没有其他人会重复我的愚蠢错误。 :)
标签: c# sql-server transactions integration-testing transactionscope