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

时间:2016-02-18 09:28:40

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

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

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

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

  

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

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

有没有办法纠正模型类?

1 个答案:

答案 0 :(得分: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
");