从Char映射到布尔值

时间:2014-10-02 09:20:24

标签: c# dapper

我们使用Dapper作为传统Informix数据库的ORM,并且在此数据库中,布尔字段实际上存储为Char,其中包含' F' F'意思是假和' T'意思是真的。

在我们的POCO中,我们希望公开一个布尔属性,并指示Dapper在读取和写入数据库时​​映射到/从相关的char值。

例如:

我们假设我们在一个名为" Active"的表格中有一个字段。 Active列的数据库中的值将是" T" " F"

我们的POCO可能看起来像这样:

public class MyTable
{
    public bool Active { get; set; }
}

是否可以在Dapper中创建自定义映射,如果基础值为" T"则将此PCOO中的Active属性设置为true,如果" F&#,则为false 34;

我知道可以解决这个问题的一种方法是拥有两个属性,一个是Dapper可以直接映射到的字符串,另一个是POCO的使用者使用的布尔值。即:

public class MyTable
{
    public string Active { get; set; }
    public bool MyActive 
    {
        get { return Active == "T"; }
        set { Active = (value == "T"); }
    }
}

这种方法的缺点是必须保持两个属性,所以如果有一种方法可以扩展dapper来让它为我做这个(特别是因为表中有很多这样的字段)会很好我们的数据库)。

我已经看过实现自定义类型地图但是虽然这适用于自定义复杂类型,但我不确定当我想从一个基本类型映射到这个实例时它将如何工作另一种基本类型。

1 个答案:

答案 0 :(得分:5)

我怀疑dapper支持它,看看this related question's answer。如您所见,Active - 属性甚至不必公开,请将其设为private以避免混淆。但是,我会将您的bool媒体资源命名为IsActive

public class MyTable
{
    private string Active { get; set; }
    public bool IsActive 
    {
        get { return Active == "T"; }
        set { Active = value ? "T" : "F"; }
    }
}