C# 使用SQLBulkCopy插入数据后检索标识列
我有一个模型:C# 使用SQLBulkCopy插入数据后检索标识列,c#,sql,.net,sql-server,C#,Sql,.net,Sql Server,我有一个模型: 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的一个实现,除了在
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的一个实现,除了在插入之后没有填充identity属性: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);
}
var dr=新的可枚举数据读取器(lst);
使用(var bulkCopy=new SqlBulkCopy(connectionString,SqlBulkCopyOptions.UseInternalTransaction)){
添加(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,如果它愿意,实际上也不能这样做
most遵循的模式是使用SqlBulkCopy
插入临时表,然后使用insert INTO..OUTPUT Inserted.Id..SELECT*FROM#Tmp
将这些行放入主表
这将允许您收回插入的ID并更新模型