类型为int的EF6 Map列为实体属性类型bool

时间:2015-05-11 06:51:25

标签: entity-framework entity-framework-6

我使用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吗?如果没有,为什么?为什么没有实施?

当两者都需要公开时,为同一件事物提供两个属性是一件麻烦事。

1 个答案:

答案 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属性中的名称来获取属性 - 在数据库中进行映射。