我们将Dapper用作旧版Informix数据库的ORM,并且在该数据库中,布尔字段实际上存储为Char,其中“ F”表示False,“ T”表示True。
在我们的POCO中,我们希望公开一个布尔值属性,并指示Dapper在读写数据库时映射到相关char值/从相关char值映射。
例如:
假设我们在名为“活动”的表中有一个字段。数据库中“活动”列的值将是“ F”的“ T”
我们的POCO可能如下所示:
public class MyTable
{
public bool Active { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
是否可以在Dapper中创建一个自定义映射,对于该列,如果基础值是“ T”,则该列将POCO中的Active属性设置为true;如果是“ F”,则将false设置为false?
我知道可以解决此问题的一种方法是拥有两个属性,一个是Dapper可以直接映射到的字符串,另一个是POCO的使用者使用的布尔值。即:
public class MyTable
{
public string Active { get; set; }
public bool MyActive
{
get { return Active == "T"; }
set { Active = (value == "T"); }
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的缺点是必须维护两个属性,所以如果有一种方法可以扩展dapper来为我完成此操作,那将是一个很好的选择(特别是因为数据库表中有很多类似这样的字段) 。
我已经看过实现自定义类型映射的方法,但是尽管这对自定义复杂类型有效,但是我不确定当我想从一种基本类型映射到另一种基本类型时,它如何在这种情况下工作。
我怀疑dapper支持它,看看这个相关问题的答案。如您所见,Active-property甚至不必公开,因此private请避免混淆。但是,我要说出你的bool财产IsActive。
public class MyTable
{
private string Active { get; set; }
public bool IsActive
{
get { return Active == "T"; }
set { Active = value ? "T" : "F"; }
}
}
Run Code Online (Sandbox Code Playgroud)