#asp.net #.net #entity-framework-4 #ef-model-first
#asp.net #.net #entity-framework-4 #ef-model-first
Вопрос:
Я изучаю первый подход модели в Entity Framework. Я обнаружил, что все данные удаляются всякий раз, когда происходит повторная генерация базы данных из модели. Действительно ли model-first полезный подход или есть способ это исправить
Ответ №1:
Первая модель не удаляет ваши данные автоматически. Он создает SQL-скрипт для создания базы данных, и если вы его выполните, он, вероятно, удалит все ваши таблицы, но вы можете изменить скрипт вручную или использовать какой-нибудь продвинутый инструмент для обновления базы данных:
- Блок питания для генерации базы данных (требуется по сравнению с 2010 Premium или Ultimate)
- Huagati EDMX tools (коммерческий инструмент)
Ответ №2:
Entity Framework удаляет вашу базу данных и воссоздает ее с нуля. Именно так это и работает. Microsoft работает над стратегией миграции, которая позволит вам переносить изменения, но она не будет готова до следующей основной версии.
Есть некоторые сторонние инструменты, которые пытаются решить эту проблему, но я бы не стал слишком полагаться на них.
Ответ №3:
Один из способов решения этой проблемы — заполнить ваши данные, т. е. заполнить базу данных некоторыми тестовыми данными после того, как EF их создаст. Смотрите http://binuity.com/blog/2011/03/28/ef4-seeding-data-on-each-dropcreatedatabaseifmodelchanges /
Еще один способ — иметь инструменты, которые пытались бы обновить базу данных вместо ее повторного создания.
Комментарии:
1. Применимо только к Code First
2. @cdm9002, да, пример кода для заполнения применим только для Code First, но также возможно сначала заполнить ваши данные в Model First. Все, что вам нужно сделать, это написать код, который вставляет исходные данные в базу данных (например, что-то вроде msdn.microsoft.com/en-us/library/ff407091.aspx ). Однако, OP здесь, вероятно, больше заинтересован в сохранении своих данных, и это возможно только с использованием некоторых инструментов!
Ответ №4:
Всякий раз, когда вы обновляете модель и запускаете автоматически сгенерированный SQL-скрипт, вы можете вручную заполнить базу данных, чтобы получить свои данные обратно. Заполнение в Model-First работает не так, как в Code-First, поэтому часто обсуждаемый и полезный подход DropAndCreateDatabaseIfModelChanges работает не так хорошо. Самый простой способ — заполнить вручную, инициализировав себя.
var db = new MyDbContext();
db.Database.Initialize(true);