Sql server 使用EF迁移将现有DB列添加到模型
在数据库中创建了一个列Sql server 使用EF迁移将现有DB列添加到模型,sql-server,entity-framework,entity-framework-migrations,Sql Server,Entity Framework,Entity Framework Migrations,在数据库中创建了一个列,,它有一个默认的GETDATE(),因此在插入时自动分配。此列当前不在模型类中。当我尝试将属性添加到模型类时: [Required, DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime Created { get; set; } 然后运行更新数据库,结果显示消息: 无法更新数据库以匹配当前模型,因为存在 已禁用挂起的更改和自动迁移。要么写下 对基于代码的迁移的挂起模型更改或启用自动 迁
,
,它有一个默认的GETDATE()
,因此在插入时自动分配。此列当前不在模型类中。当我尝试将属性添加到模型类时:
[Required, DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime Created { get; set; }
然后运行更新数据库
,结果显示消息:
无法更新数据库以匹配当前模型,因为存在
已禁用挂起的更改和自动迁移。要么写下
对基于代码的迁移的挂起模型更改或启用自动
迁移。将DbMigrationsConfiguration.AutomaticMiggrationsEnabled设置为
true以启用自动迁移。您可以使用添加迁移
命令将挂起的模型更改写入基于代码的迁移
当我尝试允许自动迁移时,EF尝试创建DB列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
");