Search code examples
asp.net-mvc-4ef-code-first

Entity Framework Code First Migration for Computed Column


I am trying to add a computed column HasAnyCheck that returns true if any or both Check1 and Check2 is true.

My model:

public bool Check1 { get; set; }

public bool Check2 { get; set; }

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public bool HasAnyCheck { get; private set; }

My migration:

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

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

When I run Update-Database I get the error Incorrect syntax near '='.


Solution

  • I suspect the issue is your computed_column_expression does not explicitly return a value:

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

    in your case you could potentially also get away with bitwise OR:

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