1

我们需要SQLBulkCopy一个我们拥有的集合。由于我们需要一个 IDataReader 来使用 SQLBulkCopy,因此我尝试使用 FastMember。据我了解,我们可以使用从 IEnumerableFastMember创建一个。IDataReader

所以我的代码是——

using (var reader = ObjectReader.Create(customer.Records)
{
    DataAccess.BulkInsert(serverName, databaseName, tableName, reader);
}

但问题是每条记录都有一个名为的子对象,其中包含我希望在数据读取器中拥有的更多属性,以便它们可以插入到数据库中的表中。但是找不到办法弄平IDataReader

4

1 回答 1

2

我通过创建一个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);
        }
    }
于 2018-04-27T10:48:42.810 回答