Asp.net mvc 4 计算列的实体框架代码首次迁移
我正在尝试添加一个计算列HasAnyCheck,如果Check1和Check2中的任何一个或两者都为true,则该列将返回true 我的模型: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; } 我的迁移:
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])