Первой миграции кода: как установить значение по умолчанию для нового свойства?
Я использую 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 (или в другом месте)?
Ответы
Ответ 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;
}