我使用Entity Framework 6(EF6),我想映射一个类型为int的列,它只对我的实体上的bool类型的属性赋值0或1。
我想这样做,而不需要为同一列提供两个属性,方法是使用未使用映射在其get'er和set'er中的属性映射的属性进行映射。
public class MyEntity
{
...
[NotMapped]
public bool MyColumnAsBool
{
get { return MyColumnAsInt == 1; }
set { MyColumnAsInt = value ? 1 : 0; }
}
public int MyColumnAsInt { get; set; }
...
}
但我似乎无法弄清楚是否可以像NHibernate一样单独使用Attributes?如果没有,为什么?为什么没有实施?
当两者都需要公开时,为同一件事物提供两个属性是一件麻烦事。
我认为没有办法更好地做到这一点,但你可以做一些事情让它看起来没问题:
public class MyEntity
{
...
[NotMapped]
public bool MyColumn
{
get { return MyColumnAsInt == 1; }
set { MyColumnAsInt = value ? 1 : 0; }
}
[Column("MyColumn")]
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public int MyColumnAsInt { get; set; }
...
}
这样,如果通过intellisense浏览类,则只会看到具有正确名称的boolean属性,而back3属性的隐藏属性是隐藏的,并使用Column
属性中的名称来获取db中的属性映射。