У меня есть файл Entity Framework .edmx , в котором одна из моделей основана на представлении экземпляра SQL Server в Azure. Я изменяю это представление так, чтобы оно включало один дополнительный столбец.
В SQL Server Management Studio оператор ALTER
успешно выполняется без инцидентов. После этого SELECT * FROM theView
показывает новый столбец, как и ожидалось.
Обращаясь к решению в Visual Studio, я открываю файл .edmx , чтобы отобразить область разработки для моделей. Затем я щелкаю правой кнопкой мыши и выбираю Обновить модель из базы данных . Мне показывают мастер обновления и переключаются на вкладку Обновить . Многие виды отображаются на вкладке. Это относится и к недавно измененному.
Я нажимаю Готово и через несколько секунд мастер завершает работу. Однако представление в базе данных больше не имеет дополнительного поля, что подтверждается выполнением приведенного выше оператора SELECT
и просмотром его структуры в режиме «Дизайн». Неожиданно, но в соответствии с отсутствующим столбцом, мое решение сталкивается с этой ошибкой при попытке вернуть соответствующий DbSet
:
System.Data.SqlClient.SqlException: неверное имя столбца
Я прочитал несколько связанных статей, которые предполагают, что есть проблемы, а также причуды к функции Update Models from Database
:
Тем не менее, ни один из них не упоминает поведение, которое я наблюдаю. Также я думаю, что мои шаги согласуются с этого урока . Это восхитительно устарело, но все, кроме конечного результата, похоже на линейку в VS 2017.
Является ли мое ожидание того, что сгенерированные модели должны соответствовать базе данных, а не наоборот, неверно? Возможно, я пропустил какой-то шаг или настройку.
ОБНОВЛЕНИЕ [2019-06-19] : Хотя комментатор, который спросил об этом, пересмотрел это как возможную красную сельдь, я упомяну это для полноты картины. OnModelCreating
для контекста выглядит следующим образом (по умолчанию):
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}