使用EF迁移将现有数据库列添加到模型中

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

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

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

无法更新数据库以匹配当前模型,因为有未决的更改并且自动迁移已禁用。 将挂起的模型更改写入基于代码的迁移或启用自动迁移。 将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。 您可以使用“添加迁移”命令将挂起的模型更改写入基于代码的迁移。

当我尝试允许自动迁移时,EF尝试创建数据库列Created ,但是失败,因为列已经存在。

有没有办法纠正模型类?


使用-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
");
链接地址: http://www.djcxy.com/p/90257.html

上一篇: Add existing DB column to model with EF migration

下一篇: initial code migration not working