繁体   English   中英

使用SQLBulkCopy插入数据后检索标识列

[英]Retrieving identity column after inserting data using SQLBulkCopy

我有一个模型:

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的一个实现,似乎运行良好,只是在插入发生后它没有填充身份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”将使用该行当前在数据库中的标识列的值进行填充。

我究竟做错了什么?

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

紧随其后的一种模式是使用SqlBulkCopy插入临时临时表,然后使用INSERT INTO..OUTPUT Inserted.Id..SELECT * FROM #Tmp将这些行放入主表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM