Как использовать FastMember для создания считывателя объекта с дочерним объектом - PullRequest
0 голосов
/ 26 апреля 2018

Нам нужно SQLBulkCopy коллекции, которая у нас есть. И так как нам нужен IDataReader для использования SQLBulkCopy, я попытался использовать FastMember для этого. Как я понимаю, мы можем использовать FastMember для создания IDataReader из IEnumerable.

Так что мой код читает-

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

Но проблема в том, что у каждой записи есть дочерний объект, который имеет дополнительные свойства, которые я хочу иметь в считывателе данных, чтобы их можно было вставить в таблицу в базе данных. Но не могу найти способ получить плоскость IDataReader

1 Ответ

0 голосов
/ 27 апреля 2018

Я исправил эту проблему, создав 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);
        }
    }
...