Asp.net mvc 4 计算列的实体框架代码首次迁移

Asp.net mvc 4 计算列的实体框架代码首次迁移,asp.net-mvc-4,ef-code-first,Asp.net Mvc 4,Ef Code First,我正在尝试添加一个计算列HasAnyCheck,如果Check1和Check2中的任何一个或两者都为true,则该列将返回true 我的模型: public bool Check1 { get; set; } public bool Check2 { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public bool HasAnyCheck { get; private set; } 我的迁移:

我正在尝试添加一个计算列HasAnyCheck,如果Check1Check2中的任何一个或两者都为true,则该列将返回true

我的模型:

public bool Check1 { get; set; }

public bool Check2 { get; set; }

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public bool HasAnyCheck { get; private set; }
我的迁移:

    public override void Up()
    {
        Sql("ALTER TABLE [MyTable] ADD [HasAnyCheck] AS ([Check1] = 1 OR [Check2] = 1)");
    }

    public override void Down()
    {
        DropColumn("dbo.MyTable", "HasAnyCheck");
    }

当我运行更新数据库时,在“=”附近出现错误语法不正确

我怀疑问题在于您没有显式返回值:

ALTER TABLE [MyTable] ADD [HasAnyCheck] AS CAST((CASE WHEN [Check1]=1 OR [Check2]=1 THEN 1 ELSE 0 END) AS BIT)
在您的情况下,您还可能逃脱:


第一个解决方案没有按预期工作,因为创建的计算列最终为int而不是boolean/bit字段。然而,第二个解决方案确实如预期的那样工作。我更新了第一个解决方案,将结果显式转换为
——现在应该更好了
ALTER TABLE [MyTable] ADD [HasAnyCheck] AS ([Check1]|[Check2])