代码优先实体框架

时间:2011-09-20 16:57:27

标签: entity-framework

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

1 个答案:

答案 0 :(得分:1)

简单的答案是否定的。 EF在这个领域是完全愚蠢的,它完全没有简单的类型映射。

这意味着您无法更改标量属性的类型,并且您的类确实必须使用值1和2来处理该int属性以定义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