Когда вы делаете настоящую разработку кода, ресурсы метаданных CSDL, SSDL и MSLвсе еще там.Они просто выводятся из вашей объектной модели при сборке.Поскольку код управляет моделью и схемой, он может самостоятельно определять эти ресурсы.Однако есть некоторые случаи, когда он не знает, что выводить из кода.Например, если вы измените имя свойства сущности, он не сможет узнать, намеревались ли вы удалить старый столбец (имя свойства) и добавить новый столбец с новым именем, или вы намеревались сохранить старый столбец и переименовать его.с новым именем.Вот почему нет хорошей миграции данных / схем с EF-кодом в первую очередь, и поэтому он отбрасывает и воссоздает всю базу данных каждый раз, когда вы изменяете свою модель в коде.
Этот недостаток DbContext API, безусловно, самый большойпроблема и в настоящее время работает над командой ADO.NET, как отмечено в блоге Скотта Хэнслемана .
На данный момент я лично решил изменить базу данных вручную, а затем просто обновить свой C #код, чтобы отразить это.Это требует некоторого приличного знания того, как эти вещи работают, и я все еще практикуюсь.Другой способ сделать это - оставить файл EDMX там, обновить его, как обычно, и позволить ему восстанавливать ваши POCO, когда что-то изменится.Однако это почти ничем не отличается от выполнения классических обновлений EF, поскольку любые изменения в POCO будут перезаписаны при их регенерации.
Еще одно решение состоит в том, чтобы снова оставить файл EDMX и обновить его, когда все изменится, ноустановите для свойства «Преобразовать связанные текстовые шаблоны при сохранении» значение false.
http://www.codetunnel.com/content/images/TransformRelatedTextTemplatesOnSave.jpg
Это не позволяет EDMX запускать ваши шаблоны T4 и повторно генерировать ваши POCO.Таким образом, вы просто обновите его, чтобы убедиться, что ресурсы метаданных остаются точными.Но тогда вы бы вручную изменили свои POCO, чтобы отразить любые изменения в модели / схеме.Это все еще требует гораздо больше работы, чем просто создание кода, но, на мой взгляд, это полезно для изучения.