PetaPoco将逗号分隔的字符串映射到字符串List

时间:2013-05-06 12:26:57

标签: c# .net orm petapoco micro-orm

在数据库中,我有一个包含逗号分隔值,如下所示:

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

在代码中, DTO包含一个List< string> ,如下所示:

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

我想 PetaPoco 为我做转换

我已经阅读了IMapper界面,但我找不到如何使用它的示例 如何实现所需的结果?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

如果数据库中以逗号分隔的字符串很常见,那么实现IMapper可能是您的最佳选择。但是,如果这只在您的架构中出现一次,那么执行以下操作可能更简单,更易于维护:

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

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

(注意 - 我很确定在只读属性上假定PetaPoco.Ignore。)