C# 从字符映射到布尔值
我们使用Dapper作为遗留Informix数据库的ORM,在该数据库中,布尔字段实际上存储为字符,“F”表示False,“T”表示True 在我们的POCO中,我们希望公开一个布尔属性,并指示Dapper在读写数据库时映射到相关的char值 例如: 假设我们在一个表中有一个名为Active的字段。数据库中活动列的值为T或F 我们的POCO可能看起来像这样:C# 从字符映射到布尔值,c#,dapper,C#,Dapper,我们使用Dapper作为遗留Informix数据库的ORM,在该数据库中,布尔字段实际上存储为字符,“F”表示False,“T”表示True 在我们的POCO中,我们希望公开一个布尔属性,并指示Dapper在读写数据库时映射到相关的char值 例如: 假设我们在一个表中有一个名为Active的字段。数据库中活动列的值为T或F 我们的POCO可能看起来像这样: public class MyTable { public bool Active { get; set; } } 是否可以在D
public class MyTable
{
public bool Active { get; set; }
}
是否可以在Dapper中创建一个自定义映射,如果基础值为T,则此列将POCO中的活动属性设置为true,如果为F,则设置为false
我知道我可以解决这个问题的一种方法是拥有两个属性,一个是Dapper可以直接映射到的字符串,另一个是POCO消费者使用的布尔值。i、 e:
public class MyTable
{
public string Active { get; set; }
public bool MyActive
{
get { return Active == "T"; }
set { Active = (value == "T"); }
}
}
这种方法的缺点是必须维护两个属性,因此,如果有一种方法可以扩展dapper,让它为我做到这一点,那将是一件非常好的事情,特别是因为在我们的数据库表中有很多这样的字段
我已经研究过如何实现自定义类型映射,但尽管这对自定义复杂类型有效,但我不确定在这种情况下,当我想从一种基本类型映射到另一种基本类型时,它将如何工作。我怀疑dapper是否支持它,请看一看。正如您所看到的,活动属性甚至不必是公共的,将其设置为私有以避免混淆。但是,我会将您的bool属性命名为active
我怀疑衣冠楚楚的人会支持它,看看吧。正如您所看到的,活动属性甚至不必是公共的,将其设置为私有以避免混淆。但是,我会将您的bool属性命名为active
public class MyTable
{
private string Active { get; set; }
public bool IsActive
{
get { return Active == "T"; }
set { Active = value ? "T" : "F"; }
}
}