【问题标题】:Entity Framework Code First Migration for Computed Column计算列的实体框架代码优先迁移
【发布时间】:2020-04-07 21:08:47
【问题描述】:

我正在尝试添加一个计算列 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-4 ef-code-first


    【解决方案1】:

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

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

    在你的情况下,你也有可能摆脱bitwise OR

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

    【讨论】:

    • 第一个解决方案没有按预期工作,因为创建的计算列最终是 int 而不是 boolean/bit 字段。但是,第二种解决方案确实按预期工作。
    • 我更新了第一个解决方案,将结果显式转换为 BIT - 现在应该会更好
    猜你喜欢
    • 2013-12-29
    • 2015-06-07
    • 1970-01-01
    • 2017-10-31
    • 2013-01-02
    • 1970-01-01
    相关资源
    最近更新 更多