我们需要SQLBulkCopy
我们拥有的集合。因为我们需要一个IDataReader来使用SQLBulkCopy,所以我尝试使用FastMember。据我了解,我们可以使用FastMember
从IEnumerable创建IDataReader
。
所以我的代码是 -
using (var reader = ObjectReader.Create(customer.Records)
{
DataAccess.BulkInsert(serverName, databaseName, tableName, reader);
}
但问题是每个记录都有一个子对象,在其中有其他属性,我想在数据读取器中使用它们,以便它们可以插入到数据库中的表中。但无法找到一种方法来展平IDataReader
答案 0 :(得分:1)
我通过创建anonymous object
并使用我们需要的值填充它来修复此问题。这样,您可以展平对象并仅使用所需的属性。
var newObjects = customer.Records.Select(record => new
{
customer.Id,
record.DisplayName,
record.TotalCount,
record.Conditions.IsActive,
record.Conditions.SusperCondition.IsSuper,
Status = (int)record.Status
});
然后将此新对象传递给ObjectReader
using (var reader = ObjectReader.Create(newObjects))
{
DataAccess.BulkInsert(serverName, databaseName, tableName, reader, SetBulkCopyMappings);
}
批量插入 -
internal static void BulkInsert(string serverName, string databaseName, string tableName, IDataReader dataReader, Action<SqlBulkCopy> setMappings)
{
using (var bulkCopy = new SqlBulkCopy(BuildConnectionString(serverName, databaseName)))
{
bulkCopy.DestinationTableName = tableName;
setMappings(bulkCopy);
bulkCopy.WriteToServer(dataReader);
}
}