Entity framework 代码优先实体框架

Entity framework 代码优先实体框架,entity-framework,Entity Framework,我们使用Mistrosoft的代码优先实体框架(4.1)映射到现有数据库。我们希望能够更改一些属性的数据类型和值,这些属性通过表一对一地映射。例如,表中有一列确定记录是否为当前记录。它是一个整数列,值为1或2。我们不想更改数据库,因为有许多不同的应用程序从该列获取数据,但是我们的代码最好让映射到该表的类有一个bool属性,该属性为IsActive,如果表列为1,则返回true,否则返回false。是否有一种方法可以配置EnityFrame工作,以便我们可以直接定义此映射,而不必在实际类上有两个属

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

简单的答案是否。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实体查询中使用
    IsActive