c# - 想要在事务中的后续插入中使用从插入返回的标识

标签 c# sql orm massive

我正在使用 Rob Conery 的 Massive用于数据库访问。我想围绕几个插入包装一个事务,但第二个插入使用从第一个插入返回的标识。如何在交易中做到这一点对我来说并不明显。一些帮助将不胜感激。

var commandList = new List<DbCommand>
    {
        contactTbl.CreateInsertCommand(new
            {
                newContact.Name,
                newContact.Contact,
                newContact.Phone,
                newContact.ForceChargeThreshold,
                newContact.MeterReadingMethodId,
                LastModifiedBy = userId,
                LastModifiedDate = modifiedDate,
            }),
        branchContactTbl.CreateInsertCommand(new
            {
                newContact.BranchId,
                ContactId = ????, <-- how to set Id as identity from previous command
            }),
    };

最佳答案

在这两个插入之间进行查询,这个来自 Massive 的方法可能会有用:

public object Scalar(string sql, params object[] args) {
    object result = null;
    using (var conn = OpenConnection()) {
        result = CreateCommand(sql, conn, args).ExecuteScalar();
    }
    return result;
} 

你的 sql 将是 = "select scope_identity()"

更新 2013/02/26

再次查看 Massive 代码,没有可靠的方法来检索最后插入的 ID。

上面的代码只有在建立“select scope_identity()”的连接被合并时才有效。 (它必须与进行插入的连接相同)。

大量table.Insert(..) 方法返回包含ID 字段的Dynamic,该字段填充有“SELECT @@IDENTITY”。它从全局范围获取最后插入的 ID,这是明显的错误(在多线程场景中很明显)。

关于c# - 想要在事务中的后续插入中使用从插入返回的标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5411697/

相关文章:

c# - 检查空引用

c# - 运行时不显示图像 C# WPF

c# - MVC4 网站仅适用于一台 PC,不适用于其他 PC,失败并显示 "SQL Network Interfaces, error: 26"

java - POJO 不相关或不可用时的 HQL 查询

symfony - 学说2映射覆盖从MappedSuperclass继承的inversedBy字段

c# - 如何从异步方法返回对象 (c# - xamarin.forms)?

sql - 术语 DDL、DML 和 DCL 的起源是什么?

sql - SAS 类别划分频率

SQL AdventureWorks 按城市按性别统计员工数量

orm - Symfony2 - 学说 :create in Production