Come utilizzare FastMember per creare un lettore di un oggetto con oggetto figlio

c# fastmember idatareader sqlbulkcopy

Domanda

Abbiamo bisogno di SQLBulkCopy una collezione che abbiamo. E poiché abbiamo bisogno di un IDataReader per usare SQLBulkCopy, ho provato a usare FastMember per questo. Come ho capito, possiamo usare FastMember per creare un IDataReader da un IDataReader IEnumerable.

Quindi il mio codice legge-

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

Ma il problema è che ogni record ha un oggetto figlio chiamato che ha ulteriori proprietà in esso che voglio avere nel lettore di dati in modo che possano essere inseriti nella tabella nel database. Ma non riesco a trovare un modo per ottenere un IDATReader IDataReader

Risposta accettata

Ho risolto questo problema creando un anonymous object e riempiendolo con i valori che ci servivano. In questo modo puoi appiattire il tuo oggetto e utilizzare solo le proprietà di cui hai bisogno.

var newObjects = customer.Records.Select(record => new
{
    customer.Id,
    record.DisplayName,
    record.TotalCount,
    record.Conditions.IsActive,
    record.Conditions.SusperCondition.IsSuper,
    Status = (int)record.Status
});

Quindi passa semplicemente questo nuovo oggetto a ObjectReader

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

Inserto di massa -

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);
        }
    }


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché