asp.net-mvc-4 - 计算列的实体框架代码优先迁移
问题描述
我正在尝试添加一个计算列HasAnyCheck ,如果Check1和Check2中的任何一个或两个为真,则该列返回真。
我的模型:
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 '='。
解决方案
我怀疑问题是您的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])
推荐阅读
- prolog - SWI Prolog - 将谓词与另一个谓词一起使用
- python - SQLALchemy中如何在具有多个连接路径的表上建立双向关系?
- java - 用符号后的长度替换字符串
- c# - 如何将 AntiForgeryToken 与 Fetch 一起使用?
- r - 在 Ubuntu Bionic Beaver (18.04)、x86_64 中安装 RStudio 时的权限问题
- react-native - 在 setState false 后反应本机模式未关闭
- angular - 离子:无法进行产品构建 appRate ionic4
- jquery - 如何在移动元素时保持对齐
- kotlin - Kotlin 协程:在 Sequence::map 中调用 Deferred::await
- android - 什么触发 LiveData onChanged()?