首页 > 解决方案 > 计算列的实体框架代码优先迁移

问题描述

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

我的模型:

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");
    }

当我运行Update-Database时,出现错误Incorrect syntax near '='

标签: asp.net-mvc-4ef-code-first

解决方案


我怀疑问题是您的computed_column_expression没有明确返回值:

ALTER TABLE [MyTable] ADD [HasAnyCheck] AS CAST((CASE WHEN [Check1]=1 OR [Check2]=1 THEN 1 ELSE 0 END) AS BIT)

在您的情况下,您也可能会摆脱按位 OR

ALTER TABLE [MyTable] ADD [HasAnyCheck] AS ([Check1]|[Check2])

推荐阅读