У меня есть несколько довольно больших моделей, которые я помогаю в обновлении, и самое важное, что я заметил в команде «Обновить модель из мастера» в EF v1, это то, что она не удаляет НИЧЕГО из CSDL. SSDL может быть на 100% правильным (и в большинстве случаев). Таким образом, есть два способа справиться с этим.
1) Измените / запишите изменения XML.
2) Внесите изменения вручную в конструкторе.
Я очень старался заставить метод 1 работать. Это непросто, но в основном лучший совет, который я могу вам дать, это сравнить SSDL с версией CSDL, и вы очень близко подходите (если речь идет только о столбцах).
Хуже всего, когда вы переименовываете таблицу. Тогда каждое отношение FK, которое было построено на этой таблице в CSDL, по сути дублируется (поскольку переименование действительно является удалением / созданием, но помните, что мастер ничего не удаляет в CSDL: -))
Итак, самый простой совет, который у меня есть. Внесите изменения в мастере обновлений. Затем скомпилируйте только проект .edmx (оставив дизайнер открытым). После этого дважды щелкните каждое сообщение об ошибке и «устраните ошибку».
Устранение ошибки зависит от сценария. Если это дублированные столбцы, щелкните правой кнопкой мыши на неправильном названии столбца и нажмите «Удалить». Если это плохой FK, щелкните по нему правой кнопкой мыши и удалите его.
Я помню, как кто-то в Codeplex посещал мастер обновления с шаблонами T4 (что они сейчас используют в .NET v4). Я просто думаю, что это намного сложнее, чем кажется на первый взгляд. Я пытался сделать это, и когда я попал в сценарии, такие как множественность 1 .. * * .. 1, xml и код в генераторе t4 стали действительно страшными. Поэтому вместо этого мы прибегаем к методу «устранения ошибок».