Подтвердить что ты не робот

Первой миграции кода: как установить значение по умолчанию для нового свойства?

Я использую EF6 для хранения экземпляров класса report в моей базе данных. База данных уже содержит данные. Скажем, я хотел добавить свойство к report,

public class report {
    // ... some previous properties

    // ... new property:
    public string newProperty{ get; set; }
}

Теперь, если я перейду в консоль диспетчера пакетов и выполните

add-migration Report-added-newProperty
update-database

Я получу файл в папке '/Migrations', добавив в таблицу столбец newProperty. Это прекрасно работает. Однако в старых записях в базе данных значение для newProperty теперь является пустой строкой. Но я хочу, чтобы это было, например, "старое".

Итак, мой вопрос: как установить значения по умолчанию для новых свойств (любого типа) в миграции script (или в другом месте)?

4b9b3361

Ответ 1

Если вы видите сгенерированный код перехода, вы увидите AddColumn

AddColumn("dbo.report", "newProperty", c => c.String(nullable: false));

Вы можете добавить defaultValue

AddColumn("dbo.report", "newProperty", 
           c => c.String(nullable: false, defaultValue: "old"));

Или добавьте defaultValueSql

AddColumn("dbo.report", "newProperty",
           c => c.String(nullable: false, defaultValueSql: "GETDATE()"));

Ответ 2

Вы должны изменить строку в своем переносе script, который добавляет свойство /column следующим образом:

AddColumn("dbo.reports", "newProperty", c => c.String(nullable: false, defaultValue: "test"));

Ответ 3

Я обнаружил, что достаточно использовать Auto-Property Initializer для свойства entity, чтобы выполнить задание.

Например:

public class Thing {
    public bool IsBigThing { get; set; } = false;
}