Как создать записи для записи файла CSV с FileHelpers - PullRequest
3 голосов
/ 07 января 2010

Я использую Filehelpers для импорта базы данных из файлов. Сейчас я работаю над обратным процессом и не могу понять, как создавать записи из моих объектов данных.

Все примеры, которые я могу найти, показывают, идут из файла -> таблица -> файл Я использую интерфейсы с генериками для преобразования. Я использую этот при входящем преобразовании:

 public interface IConvertCSVRecordToType<T> where T : SimpleBase
  {
    T ConvertCSVRecordToType();
  }

и хотел бы использовать что-то подобное для исходящего:

 public interface IConvertTypeToCSVRecord<T> where T : SimpleBase, new()
  {
    void ConvertTypeToCSVRecord(T type);
  }

Я использую этот класс для представления записей CSV:

  [DelimitedRecord(";"), IgnoreEmptyLines]
  public class CSVRecordFormat : IConvertCSVRecordToType<Material>, 
                                 IConvertTypeToCSVRecord<Material>

Я встретил TransformToRecordAttribute в документации Filehelpers

TransformToRecordAttribute Class

С этот атрибут вы можете пометить метод в RecordClass, который является отвечает за преобразование его в указано.

У кого-нибудь есть пример, использующий этот атрибут, или пример того, как создать набор записей, чтобы направить меня в нужном направлении?

1 Ответ

0 голосов
/ 08 января 2010

(грубый) Код, работавший с некоторыми деталями, исключен:

 public class CSVTableExportProvider<TTable, TRecord>
        where TTable : SimpleBase, new()
        where TRecord : IConvertTypeToCSVRecord<TTable>, new()
 {
    public void ExportTable(string path, string filename, bool continueOnError)
    {
      var rows = _service.GetList<TTable>();
      var records = new List<TRecord>();

      var csvfile = Path.Combine(path, filename);

      var csvFile = new CSVFile<TRecord>(csvfile, continueOnError);

        foreach (var row in rows)
        {
          var rec = new TRecord();
          rec.ConvertTypeToCSVRecord(row);
          records.Add(rec);
        }
        csvFile.ConvertRecordsToFile(records.ToArray());
     }
 }

Который я звоню из моего модульного теста:

 var provider = new CSVTableExportProvider<Material, MaterialCSVRecordFormat>();
 provider.ExportTable(foldername, filename, true);
...