【问题标题】:Retrieving identity column after inserting data using SQLBulkCopy使用 SQLBulkCopy 插入数据后检索标识列
【发布时间】:2018-06-15 18:13:58
【问题描述】:

我有一个模型:

public class A {
       public int NameID {get; set; }  //this represents the identity column in the database
       public string Name { get; set; }
       public string Value { get; set; }
}

我使用了一个 EnumerableDataReader,它是 IDataReader 的一个实现,它似乎工作得很好,只是它在 INSERT 发生后没有填充身份 PROPERTY: A.NameID。这是我的完整代码:

       var dr = new EnumerableDataReader<A>(lst);

        using (var bulkCopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction)) {
            bulkCopy.ColumnMappings.Add(nameof(A.NameID), "nameid");
            bulkCopy.ColumnMappings.Add(nameof(A.Name), "name");
            bulkCopy.ColumnMappings.Add(nameof(A.Value, "value");
            bulkCopy.DestinationTableName = "NameTable";
            bulkCopy.WriteToServer(dr);
        }

此时,我希望我的所有对象的“NameID”都将填充当前在数据库中该行的标识列的值。

我做错了什么?

【问题讨论】:

    标签: c# sql .net sql-server


    【解决方案1】:

    SqlBulkCopy 仅处理数据的复制,不是高级 DB 层。因此,它不负责拉回 ID,并且如果它愿意,它实际上也不能这样做。

    大多数人遵循的模式是使用SqlBulkCopy 插入临时临时表,然后使用INSERT INTO..OUTPUT Inserted.Id..SELECT * FROM #Tmp 将这些行放入主表中。

    这将允许您撤回插入的 ID 并更新您的模型。

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 2015-10-10
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多