PetaPoco отображает разделенную запятыми строку в список строк

В базе данных у меня есть столбец, который содержит значения, разделенные запятыми, например:

Foo.Bars varchar(100): @;1,5

В коде DTO содержит List , например:

public class Foo { public List<string> Bars {get; set;} }

Я хотел бы, чтобы PetaPoco сделал преобразование для меня.

Я читал о IMapper интерфейс, но я не смог найти пример того, как его использовать.
Как мне достичь желаемого результата?

2 ответа

Решение

Вот решение, я думаю:

public class ListMapper : IMapper 
{
    public void GetTableInfo(Type t, TableInfo ti)
    {
    }

    public bool MapPropertyToColumn(PropertyInfo pi, ref string columnName, ref bool resultColumn)
    {
        return true;
    }

    public Func<object, object> GetFromDbConverter(PropertyInfo pi, Type sourceType)
    {
        return src => 
            {
                if (sourceType == typeof (string)
                    && pi.PropertyType == typeof (List<string>)
                    && src != null)
                {
                    return ((string) src).Split(';').ToList();
                }
                return src;
            };
    }

    public Func<object, object> GetToDbConverter(Type sourceType)
    {
        return null;
    }
}

Database.Mapper = new ListMapper(); // Mapper is a static property

Если в вашей базе данных встречаются строки, разделенные запятыми, то IMapper это, вероятно, ваш лучший вариант. Однако, если это происходит только один раз в вашей схеме, может быть проще и удобнее выполнять что-то вроде этого:

[PetaPoco.Column("Bars")]
public string BarCsvString { get; set; }

[PetaPoco.Ignore]
public IEnumerable<string> Bars { get { return BarCsvString.Split(","); } }

(Примечание - я уверен, PetaPoco.Ignore предполагается для свойств только для чтения.)

Другие вопросы по тегам