c# - 带有参数的 Entity Framework Core 事务
问题描述
这是一个简单的示例,但显示了我遇到的错误。我正在尝试在事务中运行两个都有参数的命令。
例子
using (var db = new BloggingContext())
{
using (IDbContextTransaction t = db.Database.BeginTransaction())
{
using (var cmd = (IDbCommand) new SqlCommand())
{
cmd.CommandText = "CREATE TABLE [#sessionlist] (Id bigint);" +
"Insert into #sessionlist " +
"select BlogId from blogs " +
"where rating >= 10";
cmd.CommandType = CommandType.Text;
var p = cmd.CreateParameter();
p.ParameterName = "rating";
p.Value = 10;
cmd.Parameters.Add(p);
cmd.Connection = db.Database.GetDbConnection();
cmd.Transaction = t.GetDbTransaction();
cmd.ExecuteNonQuery();
}
using (var cmd = (IDbCommand) new SqlCommand())
{
cmd.CommandText = "update blogs set rating = @rating where BlogId in (select * from #sessionList)";
cmd.CommandType = CommandType.Text;
var p = cmd.CreateParameter();
p.ParameterName = "rating";
p.Value = 10;
cmd.Parameters.Add(p);
cmd.Connection = db.Database.GetDbConnection();
cmd.Transaction = t.GetDbTransaction();
cmd.ExecuteNonQuery();
}
t.Commit();
}
}
运行此命令失败并显示无效的对象名称#sessionlist,因为它似乎没有在同一个事务中运行。如果在第一个 cmd 中被修改,则不添加任何参数,而是硬编码参数。它执行正常。
如何在单个事务中运行多个命令,这两个命令都有自己的参数?
生产代码更复杂,并且确实需要将两个命令分开,因为它创建了一个在第二个命令中引用的重型临时表。
解决方案
推荐阅读
- php - PHP:循环遍历对象数组并显示第一行中所有记录的总和
- firebase - 将 Firebase Analytics 集成到带有钥匙串警告的 Xamarin iOS 垃圾邮件日志中
- python - 使用 id 访问动态添加的小部件
- angular - 如何禁用 Angular 样式指南的 tslint 规则:“选择器应以
“? - c# - 在 SDK4 中使用自适应卡时如何等待用户输入
- python - 从外部列表中按熊猫中的索引和列填充单元格值
- python - 函数和参数问题 | 无法使用 python 脚本发送命令并连接到网络设备?
- c# - 如何使用 Selenium 获取标签的文本
- python - 如何将 IP 循环集成到我的网络抓取程序中?我一直被 Crunchbase 屏蔽
- c++ - 致命错误:glew.h:使用 make 时没有这样的文件或目录