2015-09-16 5 views
0

Я использую библиотеку CsvHelper, созданную Джошем Клэком. Я думал, что источник данных, в котором я получаю файлы .csv, имел способ маскировать или «псевдонимы» заголовков столбцов с соответствующим соглашением об именах. К сожалению, это не так, поэтому я хотел бы использовать отображение Fluent Class Mapping, но я не знаю, как его реализовать.Fluent Mapping - CsvHelper

Я построил ниже класс (упрощенный на этот пост)

public class PaymentType 
{ 
    public int PaymentTypeId { get; set; } 
    public string BusinessUnit { get; set; } 
    public string Region { get; set; } 
    public string Status { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
    public decimal Amount { get; set; } 
    public string Name { get; set; } 
} 

метод ниже в другой загрузке класса и сохраняет файл

private string DownloadDS(string getURL, string fileName) 
    { 
     try 
     { 
      //CSV path 
      string url = getURL; 

      //Where to save and retrieve CSV file 
      string path = AppDomain.CurrentDomain.BaseDirectory + "ImportedFiles\\" + fileName; 

      //Download file and save it 
      WebClient client = new WebClient(); 
      client.DownloadFile(url, path); 



      return path; 
     } 
     catch 
     { 



      return ""; 
     } 

    } 

Этот метод затем обновляет БД

private void UpdateDB(string path, string fileName) 
    { 
     try 
     { 
      //read in file with CsvReader object and output to an enumerable object 
      var csv = new CsvReader(new StreamReader(path)); 
      var importedPaymentTypes = csv.GetRecords<ImportPaymentTypes>(); 

      //Save each payment type record to the db. If record exhsists, update it, if not, add it. 


      ... 

     } 
     catch 
     { 
      ... 


     } 

    } 

Я убрал некоторые логики и логику db, чтобы сократить фрагменты кода. Я читал на Fluent Mapping, но я смущен тем, как его реализовать? Я понимаю, что мне нужно построить класс, но как вы ссылаетесь/настраиваете использование класса mapper?

Вот пример с сайта Джоша;

http://joshclose.github.io/CsvHelper/#reading-reading-all-records

ответ

1

Посмотрите на секции отображения. http://joshclose.github.io/CsvHelper/#mapping

Вы зарегистрировать отображение, выполнив:

csv.Configuration.RegisterClassMap<PaymentTypeMap>(); 
+0

Спасибо, Джош и спасибо за создание такой удивительной библиотеки! Просто чтобы я понял, я построил класс карты, а затем разместил вышеприведенную строку кода внутри класса, к которому я хочу привязать файл. например «using csv.Configuration ...»? – JReam

+0

Вышеприведенная строка просто должна прийти перед вызовом 'csv.GetRecords'. Перед тем, как вы прочитаете, нужно создать сопоставление. –

+0

выдающийся, спасибо! – JReam

Смежные вопросы