[英]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.