从Char映射到布尔值
本文关键字:布尔值 映射 Char | 更新日期: 2023-09-27 18:25:16
我们使用Dapper作为遗留Informix数据库的ORM,在该数据库中,布尔字段实际上存储为Char,"F"表示False,"T"表示True。
在我们的POCO中,我们希望公开一个布尔属性,并指示Dapper在读取和写入数据库时映射到相关的char值。
例如:
假设我们在一个名为"活动"的表中有一个字段。数据库中Active列的值为"T"或"F"
我们的POCO可能看起来像这样:
public class MyTable
{
public bool Active { get; set; }
}
是否可以在Dapper中创建一个自定义映射,如果基础值为"T",则此列将POCO中的Active属性设置为true,如果为"F",则设置为false?
我知道我可以解决这个问题的一种方法是有两个属性,一个是Dapper可以直接映射到的字符串,另一个是POCO消费者使用的布尔值。即:
public class MyTable
{
public string Active { get; set; }
public bool MyActive
{
get { return Active == "T"; }
set { Active = (value == "T"); }
}
}
这种方法的缺点是必须维护两个属性,所以如果有一种方法可以扩展dapper,让它为我做到这一点,那将是一件很棒的事情(尤其是在我们的数据库表中有很多这样的字段)。
我已经考虑过实现自定义类型映射,但尽管这适用于自定义复杂类型,但当我想从一个基本类型映射到另一个基本型时,我不确定它在这种情况下会如何工作。
我怀疑dapper是否支持它,看看这个相关问题的答案。正如您所看到的,Active
-属性甚至不必是公共的,将其设为private
以避免混淆。但是,我会将您的bool
属性命名为IsActive
。
public class MyTable
{
private string Active { get; set; }
public bool IsActive
{
get { return Active == "T"; }
set { Active = value ? "T" : "F"; }
}
}