首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FastMember创建带有子对象的对象的读取器

如何使用FastMember创建带有子对象的对象的读取器
EN

Stack Overflow用户
提问于 2018-04-26 14:23:44
回答 1查看 849关注 0票数 1

我们需要SQLBulkCopy一个我们拥有的集合。因为我们需要一个IDataReader来使用SQLBulkCopy,所以我尝试使用FastMember。据我所知,我们可以使用FastMember从一个IEnumerable创建一个IDataReader

所以我的密码是-

代码语言:javascript
复制
using (var reader = ObjectReader.Create(customer.Records)
{
    DataAccess.BulkInsert(serverName, databaseName, tableName, reader);
}

但问题是,每个记录都有一个名为子对象的对象,该对象具有我希望在数据读取器中具有的更多属性,以便将它们插入数据库中的表中。但是找不到一种方法来获得一个扁平的IDataReader

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-27 10:48:42

我通过创建一个anonymous object并用我们需要的值填充它来解决这个问题。这样,您就可以将对象扁平化,并且只使用所需的属性。

代码语言:javascript
复制
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

代码语言:javascript
复制
using (var reader = ObjectReader.Create(newObjects))
{
    DataAccess.BulkInsert(serverName, databaseName, tableName, reader, SetBulkCopyMappings);
}

散装插入-

代码语言:javascript
复制
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);
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50045471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档