在数据库中有一列Created
,它有一个默认的GETDATE()
,因此它会在插入时自动分配。此列目前不在模型类中。当我尝试将属性添加到模型类时:
[Required, DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime Created { get; set; }
并运行update-database
,会产生以下消息:
无法更新数据库以匹配当前模型,因为有 挂起的更改和自动迁移已禁用。要么写 待定模型更改为基于代码的迁移或启用自动 移民。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为 如果启用自动迁移,则为true您可以使用添加迁移 命令将挂起的模型更改写入基于代码的迁移。
当我尝试允许自动迁移时,EF会尝试创建数据库列Created
,但这会失败,因为该列已经存在。
有没有办法纠正模型类?
答案 0 :(得分:1)
使用-IgnoreChanges
创建空迁移并应用于数据库。
Add-Migration AddsCreatedProperty -IgnoreChanges
Update-Database
您还希望为要从迁移中引导的任何其他数据库添加该列。因此,在空迁移中,在Up
方法
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
");