我使用Entity Framework 6(EF6),我希望将一个类型为int的列映射到实体上,该列只有值为0或1的bool类型的属性。
我希望这样做,而不需要为同一列提供两个属性,方法是使用未在其get'中映射的属性映射的属性,并设置为这样。
public class MyEntity
{
...
[NotMapped]
public bool MyColumnAsBool
{
get { return MyColumnAsInt == 1; }
set { MyColumnAsInt = value ? 1 : 0; }
}
public int MyColumnAsInt { get; set; }
...
}
但我似乎无法弄清楚的是,如果可以像NHibernate那样单独使用Attributes吗?如果没有,为什么?为什么没有实施?
当两者都需要公开时,为同一件事物提供两个属性是一件麻烦事。
答案 0 :(得分:1)
我认为没有办法更好地做到这一点,但你可以做一些让它看起来不错的事情:
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
属性中的名称来获取属性 - 在数据库中进行映射。