Как получить сущностный каркас для реализации модели и БД синхронизированы - PullRequest
4 голосов
/ 12 мая 2011

Я впервые использую код Entity Framework в производственной среде.Все шло хорошо, пока мы не подняли БД и не поместили в нее некоторые данные, а затем, чтобы получить некоторые данные, которые мы импортировали из другого места, нам пришлось изменить длину поля.Таким образом, мы сделали некоторые поля nvarchar (99) вместо nvarchar (50).

Это прошло нормально, и приложение все еще работало, но я знал, что мне нужно изменить аннотацию данных, иначе она взорвется позже, когда загрузится и попытается сохранить слишком длинное поле.Когда я это сделал, приложение взорвалось, хотя модель и БД теперь совпадают.Поэтому я подумал, что это хэш в таблице метаданных, поэтому я подумал, что я буду умным, создам новую БД, возьму оттуда хэш и скопирую ее.Это не сработало, и на самом деле теперь я не могу подключить свое приложение к тестовой базе данных, в которую у нас вообще есть данные.

Я не хочу удалять и воссоздавать эту базу данных.Я хочу, чтобы структура сущностей понимала, что модель и схема действительно совпадают.Есть ли способ для меня сделать это?Кроме того, почему копирование метаданных из БД, созданных с помощью этой модели структуры сущностей, не работает?

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Код Entity Framework Сначала создает таблицу EdmMetadata и сохраняет в ней хэш классов вашей Модели. Когда вы что-то изменяете в модели, хэш новых классов Model больше не соответствует тому, что находится в таблице EdmMetadata, и приложение должно «взорваться» во время выполнения. Чтобы продолжать использовать одну и ту же базу данных, не удаляя ее, вам нужно удалить таблицу EdmMetadata. Таким образом, EF не выполнит эту проверку и попытается продолжить доступ к БД.

Проверьте это видеоурок (перейдите к 8:10 раздела «Когда классы меняются»).

0 голосов
/ 12 мая 2011

Извините, я исправил это.Удаление метаданных сработало.Но оказалось, что я случайно обновил более позднюю версию EntityFramework, пытаясь исправить мою проблему, и эта более поздняя версия ожидала различных соглашений об именах для базы данных.В любом случае, воссоздание таблицы групповых имен «многие ко многим» со сценарием из БД, созданной Entity Framework, и удаление метаданных устранили проблему.

...