2016-02-18 3 views
1

В базе данных есть столбец Created, он имеет значение по умолчанию GETDATE(), поэтому он автоматически присваивается при вставке. Этот столбец в настоящее время не находится в классе модели. Когда я пытаюсь добавить свойство к классу модели:Добавить существующий столбец БД для моделирования с миграцией EF

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

и запустить update-database, это приводит к сообщению:

Невозможно обновить базу данных в соответствии с текущей моделью, потому что есть ожидающие изменения и автоматическая миграция отключена. Либо напишите ожидающие изменения модели на миграцию на основе кода или включите автоматическую миграцию . Установите DbMigrationsConfiguration.AutomaticMigrationsEnabled для true, чтобы включить автоматическую миграцию. Вы можете использовать команду Add-Migration для записи изменений ожидающих моделей в миграцию на основе кода.

Когда я пытался разрешить автоматическую миграцию, EF пытается создать столбец DB Created, но это не удается, поскольку столбец уже существует.

Есть ли способ исправить класс модели?

ответ

1

Создайте пустую миграцию с помощью -IgnoreChanges и примените к базе данных.

Add-Migration AddsCreatedProperty -IgnoreChanges 
Update-Database 

Вы также хотели бы добавить столбец для любых других баз данных, которые вы загрузили бы из своих миграций. Поэтому в вашей пустой миграции добавьте заявление sql в 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 
");