c# - 如何“禁用”计算列以便应用迁移?
问题描述
我有这个迁移
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<bool>(
name: "CancelledVisit",
table: "Activities",
type: "bit",
nullable: false,
defaultValue: false,
oldClrType: typeof(bool),
oldType: "bit",
oldNullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<bool>(
name: "CancelledVisit",
table: "Activities",
type: "bit",
nullable: true,
oldClrType: typeof(bool),
oldType: "bit");
}
WhereIsComplete
是一个计算列,它CancelledVisit
在计算中使用。
运行此迁移时出现错误
“IsComplete”列依赖于“CancelledVisit”列。ALTER TABLE ALTER COLUMN CancelledVisit 失败,因为一个或多个对象访问此列。
我考虑过sys.computed_columns
在迁移完成后删除记录然后重新添加它,但是在尝试插入该表时出现错误:
不允许对系统目录进行临时更新。
所以我想知道我需要做什么才能简单地运行上述迁移,这实际上只是使CancelledVisit
列不可为空
解决方案
我更新了我的迁移,它似乎工作
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn("IsComplete", "Activities");
migrationBuilder.AlterColumn<bool>(
name: "CancelledVisit",
table: "Activities",
type: "bit",
nullable: false,
defaultValue: false,
oldClrType: typeof(bool),
oldType: "bit",
oldNullable: true);
migrationBuilder.AddColumn<bool>(
name: "IsComplete",
table: "Activities",
computedColumnSql: comp);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn("IsComplete", "Activities");
migrationBuilder.AlterColumn<bool>(
name: "CancelledVisit",
table: "Activities",
type: "bit",
nullable: true,
oldClrType: typeof(bool),
oldType: "bit");
migrationBuilder.AddColumn<bool>(
name: "IsComplete",
table: "Activities",
computedColumnSql: comp);
}
comp
用于生成计算值的 SQL 字符串在哪里
推荐阅读
- apache-spark - Databricks -> 雪花:SQL 编译错误:阶段:'XYZ' 不能是管道定义中的临时阶段
- python - python:我的日期索引有什么问题?
- css - 从大字体到小字体的动画弄乱了定位
- linux - 手动运行 Logstash 时使用 ~/ 无法识别 MSSQL JDBC 驱动程序库路径
- encryption - 如何解密 RSA 加密?
- java - 将 javaFX 客户端连接到 NodeJs 服务器
- php - PHP - 修改格式化数组
- excel - VBA过滤器基于以5秒的倍数结束的时间
- python - 在熊猫数据框中以字符串格式对日期进行排序?
- php - 多次重定向问题