【问题标题】:EF6 Map column of type int to entity property type boolEF6 将 int 类型的列映射到实体属性类型 bool
【发布时间】:2015-05-11 06:51:25
【问题描述】:

我使用 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 中那样单独使用属性来完成?如果不是,为什么?为什么没有实施?

当两个属性都需要公开时,为同一事物拥有两个属性很麻烦。

【问题讨论】:

标签: entity-framework entity-framework-6


【解决方案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; }

    ...
}

这样,如果你通过智能感知浏览类,你只会看到具有正确名称的布尔属性,而支持属性对智能感知隐藏并使用来自Column属性的名称来获取属性映射在数据库中。

【讨论】:

  • 这是一个有趣的想法,但我认为@haim770 链接到的解决方案更正确,但我无法理解为什么微软没有为此制定属性......无论如何,谢谢。
  • 我明白了,我的注释隐藏了链接帖子实际将其设为私有的属性。在任何情况下,您都可以随时前往 EF 用户语音站点并检查是否有此请求,如果没有,请请求:data.uservoice.com/forums/…
  • 看起来他们会在 EF7 中做到这一点:data.uservoice.com/forums/…
猜你喜欢
  • 2020-03-07
  • 1970-01-01
  • 2012-06-16
  • 2015-12-07
  • 2012-09-23
  • 2022-12-23
  • 2015-05-27
  • 2017-02-15
  • 2022-07-06
相关资源
最近更新 更多