Я использую библиотеку 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
Спасибо, Джош и спасибо за создание такой удивительной библиотеки! Просто чтобы я понял, я построил класс карты, а затем разместил вышеприведенную строку кода внутри класса, к которому я хочу привязать файл. например «using csv.Configuration ...»? – JReam
Вышеприведенная строка просто должна прийти перед вызовом 'csv.GetRecords'. Перед тем, как вы прочитаете, нужно создать сопоставление. –
выдающийся, спасибо! – JReam