【问题标题】:Code First Entity Framework代码优先实体框架
【发布时间】:2011-09-21 18:26:09
【问题描述】:

我们正在使用 Miscrosoft 的代码优先实体框架 (4.1) 映射到现有数据库。我们希望能够更改与表一对一映射的某些属性的数据类型和值。例如,表中有一个列确定一条记录是否是当前的。它是一个整数列,值为 1 或 2。我们不想更改数据库,因为有许多不同的应用程序从该列获取数据,但如果我们的代码有映射到该列的类会很好表有一个布尔属性 IsActive,如果表列为 1,则返回 true,否则返回 false。有没有一种方法可以配置 EnityFrame 工作,以便我们可以直接定义此映射,而无需在实际类上使用两个属性,一个用于整数列(映射到数据库),一个用于从另一个计算的布尔属性?我可以将布尔属性直接映射到整数列吗?

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    简单的答案是否定的。 EF 在这方面完全是愚蠢的,它完全缺少简单的类型映射。

    这意味着您无法更改标量属性的类型,并且您的类确实必须使用该 int 属性使用值 1 和 2 来定义您的 IsActive

    解决方法可以是:

    public class YourClass
    {
        public int IsActiveValue { get; set; }
        [NotMapped]
        public bool IsActive
        {
            get { return IsActiveValue == 2; }
            set { IsActiveValue = value ? 2 : 1; }
        }
    }
    

    这种解决方法有一些缺点

    • 您必须有两个属性并且IsActvieValue 必须对上下文可见
    • 您不能在 linq-to-entities 查询中使用 IsActive

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2012-05-31
      • 2012-12-30
      • 2015-04-09
      相关资源
      最近更新 更多