Первый подход модели Entity framework удаляет все табличные данные

#asp.net #.net #entity-framework-4 #ef-model-first

#asp.net #.net #entity-framework-4 #ef-model-first

Вопрос:

Я изучаю первый подход модели в Entity Framework. Я обнаружил, что все данные удаляются всякий раз, когда происходит повторная генерация базы данных из модели. Действительно ли model-first полезный подход или есть способ это исправить

Ответ №1:

Первая модель не удаляет ваши данные автоматически. Он создает SQL-скрипт для создания базы данных, и если вы его выполните, он, вероятно, удалит все ваши таблицы, но вы можете изменить скрипт вручную или использовать какой-нибудь продвинутый инструмент для обновления базы данных:

Ответ №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);