Как использовать FastMember для создания считывателя объекта с дочерним объектом
Мы должны SQLBulkCopy
коллекция, которая у нас есть. И поскольку нам нужен IDataReader для использования SQLBulkCopy, я попытался использовать FastMember для этого. Как я понимаю, мы можем использовать FastMember
создать IDataReader
из IEnumerable
Так что мой код читает
using (var reader = ObjectReader.Create(customer.Records)
{
DataAccess.BulkInsert(serverName, databaseName, tableName, reader);
}
Но проблема в том, что у каждой записи есть дочерний объект, который имеет дополнительные свойства, которые я хочу иметь в считывателе данных, чтобы их можно было вставить в таблицу в базе данных. Но не могу найти способ получить плоскую форму IDataReader
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);
}
}