首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用EF迁移向现有表添加新列并根据现有列设置值

如何使用EF迁移向现有表添加新列并根据现有列设置值
EN

Stack Overflow用户
提问于 2019-02-11 11:41:35
回答 1查看 7.2K关注 0票数 8

例如,有一个具有值的表:

代码语言:javascript
复制
Id CarModel
1  Passat
2  Land Cruiser

并需要添加非空列制造商。制造商(现有记录)的初始值应为:

代码语言:javascript
复制
For CarModel=Passat - VW 
For CarModel=Land Cruiser - Toyota
etc.

我的迁徙:

代码语言:javascript
复制
protected override void Up(MigrationBuilder migrationBuilder)
{
  migrationBuilder.AddColumn<string>(
  name: "Manufacturer",
  table: "Cars",
  nullable: false);
}

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-12 12:55:58

不是很好的方法。您需要手动编辑生成的迁移,如下所示:

  1. 修改AddColumn命令以创建列,最初将nullable设置为true (即可选)。
  2. 使用Sql方法和原始SQL命令填充列。
  3. 添加AlterColumn命令以将列nullable更改为预期的false (即必需的)。

就像这样:

代码语言:javascript
复制
protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.AddColumn<string>(
        name: "Manufacturer",
        table: "Cars",
        nullable: true);

    migrationBuilder.Sql(
@"UPDATE Cars SET Manufacturer = CASE CarModel
  WHEN 'Passat' THEN 'VW'
  WHEN 'Land Cruiser' THEN 'Toyota'
  ELSE 'Other' END");

    migrationBuilder.AlterColumn<string>(
        name: "Manufacturer",
        table: "Cars",
        nullable: false,
        oldClrType: typeof(string),
        oldNullable: true);
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54629811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档