我如何使用FastMember创建具有子对象的对象的读者



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

所以我的代码读取 -

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

,但问题在于,每个记录都有一个儿童对象,该对象具有我想要在数据读取器中具有的进一步属性,以便可以将它们插入数据库中的表中。但是找不到一种使IDataReader

弄平的方法

我通过创建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);
        }
    }

相关内容

  • 没有找到相关文章

最新更新