我在DbContext类中有以下代码:
public partial class MyEntities : DbContext
{
public override int SaveChanges()
{
Database.ExecuteSqlCommand("INSERT INTO Schema1.View ([Key],[Value]) VALUES('Flag', '1')"); //session #1?
base.SaveChanges(); //session #2? :(
}
}
当我使用Profiler检查时,我看到了:
我打算只有一个会话(意味着我在sp_reset_connection
和INSERT INTO
命令之间不能sp_executesql
- 由SaveChanges
生成调用)
所以我尝试了以下内容:
using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
Database.ExecuteSqlCommand("INSERT INTO Schema1.View ([Key],[Value]) VALUES('Flag', '1')"); //session #1?
//Database.ExecuteSqlCommand(TransactionalBehavior.EnsureTransaction,"INSERT INTO Schema1.View ([Key],[Value]) VALUES('Flag', '1')"); //session #1?
base.SaveChanges(); //session #2? :(
scope.Complete();
}
它没有改变任何东西。
我也尝试了这个:
using (var tr = Database.Connection.BeginTransaction())
{
...
}
抛出连接关闭的异常。
我还应该尝试什么?我可以将INSERT
注入SaveChanges
代码吗?