Code First Entity Framework

问题描述:

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

简单的答案是否定的。 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必须是上下文
  • 可见你不能使用IsActive LINQ到-entities查询