【问题标题】:Add existing DB column to model with EF migration使用 EF 迁移将现有 DB 列添加到模型
【发布时间】:2016-05-30 09:13:47
【问题描述】:

在数据库中有一个列Created,它有一个默认的GETDATE(),所以它在插入时自动分配。此列当前不在模型类中。当我尝试将属性添加到模型类时:

[Required, DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime Created { get; set; }

并运行update-database,它会产生以下消息:

无法更新数据库以匹配当前模型,因为有 挂起的更改和自动迁移被禁用。要么写 待定模型更改为基于代码的迁移或启用自动 移民。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 启用自动迁移。您可以使用添加迁移 命令将挂起的模型更改写入基于代码的迁移。

当我尝试允许自动迁移时,EF 尝试创建 DB 列 Created,但这失败了,因为该列已经存在。

有没有办法纠正模型类?

【问题讨论】:

    标签: sql-server entity-framework entity-framework-migrations


    【解决方案1】:

    使用-IgnoreChanges 创建空迁移并应用到数据库。

    Add-Migration AddsCreatedProperty -IgnoreChanges
    Update-Database
    

    您还想为从迁移中引导的任何其他数据库添加该列。所以在你的空迁移中添加Up方法中的sql语句

    SQL(@"
        IF NOT EXISTS (
          SELECT *  FROM   sys.columns  WHERE  
            object_id = OBJECT_ID(N'[dbo].[MyTable]')  AND name = 'Created'
        )
        BEGIN
            ALTER TABLE MyTable
            ADD Created DATETIME NOT NULL DEFAULT (GETDATE());
        END
    ");
    

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 2012-08-01
      • 2019-11-05
      • 2023-04-01
      • 2011-08-14
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      相关资源
      最近更新 更多