我如何使用 FastMember 创建 object 和 child object 的 reader
How do I Use FastMember to create a reader of an object with child object
我们需要 SQLBulkCopy
我们拥有的 collection。由于我们需要一个 IDataReader 来使用 SQLBulkCopy,因此我尝试为此使用 FastMember。据我了解,我们可以使用 FastMember
从 IEnumerable 创建一个 IDataReader
。
所以我的代码是-
using (var reader = ObjectReader.Create(customer.Records)
{
DataAccess.BulkInsert(serverName, databaseName, tableName, reader);
}
但问题是每条记录都有一个 child object 调用,其中包含我想在数据 reader 中包含的更多属性,以便可以将它们插入到数据库中的 table。但是找不到一种方法来弄平 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);
}
}
我们需要 SQLBulkCopy
我们拥有的 collection。由于我们需要一个 IDataReader 来使用 SQLBulkCopy,因此我尝试为此使用 FastMember。据我了解,我们可以使用 FastMember
从 IEnumerable 创建一个 IDataReader
。
所以我的代码是-
using (var reader = ObjectReader.Create(customer.Records)
{
DataAccess.BulkInsert(serverName, databaseName, tableName, reader);
}
但问题是每条记录都有一个 child object 调用,其中包含我想在数据 reader 中包含的更多属性,以便可以将它们插入到数据库中的 table。但是找不到一种方法来弄平 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);
}
}