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
предполагается для свойств только для чтения.)