Использование Fastmember для массовой вставки только выбранных столбцов

У меня есть приложение, которое используется для вставки больших объемов данных (до 250 000 записей на файл) из файла в таблицу с несколькими вычисляемыми столбцами. Есть ли способ выбрать, в какие столбцы fastmember вставляются данные, чтобы я не пытался записывать в вычисляемые столбцы?

2 ответа

using (SqlBulkCopy bcp = new SqlBulkCopy(YourConnectionString))
            {
                // +1 to Marc Gravell for this neat little library to do the mapping for us
                // because DataTable isn't available until .NET Standard Library 2.0
                using (var dataReader = ObjectReader.Create(yourListOfObjects,
                    nameof(YourClass.Property1),
                    nameof(YourClass.Property2)))
                {
                    bcp.DestinationTableName = "YourTableNameInSQL";
                    bcp.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Property1", "MyCorrespondingTableColumn"));
                    bcp.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Property2", "TableProperty2"));


                    await bcp.WriteToServerAsync(dataReader).ConfigureAwait(false);
                }
            }

Модельный класс:

class ExampleModel
{
    public int property1 { get; set; }
    public string property2 { get; set; }
    public string property3 { get; set; }       
}

Список модели:

private List<ExampleModel> listOfObject = new List<ExampleModel>()
{
    new ExampleModel { property1 = 1, property2 = 'Rudra',  property3 = 'M'},
    new ExampleModel { property1 = 2, property2 = 'Shivam', property3 = 'M'}
};

Массовая вставка с использованием Fastmember с сопоставлением столбцов:

  using (var bcp = new SqlBulkCopy(SQLConnectionString))
  using (var reader = ObjectReader.Create(listOfObject))
  {
      bcp.DestinationTableName = "[dbo].[tablename]";
      bcp.ColumnMappings.Add("property1", "tableCol1");
      bcp.ColumnMappings.Add("property2", "tableCol2");
      bcp.ColumnMappings.Add("property3", "tableCol3");
      bcp.WriteToServer(reader);
  }

Помните:

Вставьте данные с полем идентификации не забудьте использовать KeepIdentity.

using (var bcp = new SqlBulkCopy(SQLConnectionString, SqlBulkCopyOptions.KeepIdentity))

Вставьте данные с полем идентификатора с автоинкрементом, удалите поле отображения столбца с автоинкрементом. like property1 - столбец с автоинкрементом в базе данных, поэтому пропустите этот столбец при вставке данных.

      using (var bcp = new SqlBulkCopy(SQLConnectionString))
      using (var reader = ObjectReader.Create(listOfObject))
      {
          bcp.DestinationTableName = "[dbo].[tablename]";
          bcp.ColumnMappings.Add("property2", "tableCol2");
          bcp.ColumnMappings.Add("property3", "tableCol3");
          bcp.WriteToServer(reader);
      }
Другие вопросы по тегам