使用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