2014-09-09 4 views
4

Я использую TextFieldParser для анализа файла CSV для импорта в базу данных с использованием EntityFramework.Использование AutoMapper для сопоставления строкового массива с объектом

TextFieldParser возвращает каждую строку CSV-файла как string[]. Чтобы сохранить объекты, мне нужно построить объект из каждой строки. Есть ли способ сделать это, используя AutoMapper?

Моя структура объекта, как это:

public class Person 
{ 
    public string FirstName { get; set; } 
    public string MiddleName { get; set; } 
    public string LastName { get; set; } 
    public string Address { get; set; } 
    public string PhoneNumber { get; set; } 
} 

И мои строки CSV в следующем формате:

FirstName, MiddleName, LastName, адрес, PhoneNumber

ответ

11

Этот можно сделать довольно легко в AutoMapper, выполнив что-то вроде этого:

Mapper.CreateMap<string[], Person>() 
    .ForMember(p => p.FirstName, opts => opts.MapFrom(s => s[0])) 
    .ForMember(p => p.MiddleName, opts => opts.MapFrom(s => s[1])) 
    .ForMember(p => p.LastName, opts => opts.MapFrom(s => s[2])) 
    .ForMember(p => p.Address, opts => opts.MapFrom(s => s[3])) 
    .ForMember(p => p.PhoneNumber, opts => opts.MapFrom(s => s[4])); 

Имейте в виду, что это сопоставление зависит от порядка значений в файле CSV.