Entity Framework - не удается сгенерировать базу данных из моего EDMX, потому что новых объектов нет в базе данных? - PullRequest
4 голосов
/ 29 декабря 2011

Получив часть моего приложения, работающего с Entity Framework 4.1, мне нужно было добавить еще пару таблиц.Я создал сущности и ассоциации в средстве просмотра моделей, а затем попросил его сгенерировать базу данных из модели.

Сразу же я получаю выбор ошибок проверки, и всплывающее окно сообщает мне, что я должен удалить все ошибки проверкипрежде чем я смогу сгенерировать базу данных.

Все ошибки, о которых идет речь, имеют следующий вид:

Ошибка 11007: Тип сущности EntityName не сопоставлен.

Или

Ошибка 11008: Ассоциация 'AssociationName' не сопоставлена.

Я получаю эту ошибку один раз для каждой новой созданной сущности и ассоциации.

Теперь я понял, что они еще не сопоставлены с базой данных, это кажется вполне логичным, поскольку они совершенно новые для модели.Вот почему я пытаюсь использовать инструменты «Создать базу данных из модели» для создания базы данных.

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

Ответы [ 3 ]

3 голосов
/ 30 декабря 2011

Оказалось, что (как это было предложено в комментариях hdv) была другая ошибка в файле .EDMX, которая терялась из-за шума сообщения об ошибке. Это относится к полю, которое я использовал для обозначения ассоциации, а затем удалил, не осознавая, что от него зависит ассоциация.

Сообщение об ошибке содержало строку в файле .EDMX, поэтому я закрыл ее в редакторе моделей и использовал Open With > XML Editor, чтобы открыть источник, найти соответствующую строку и удалить связь. Это выявило еще несколько ошибок, когда на эту связь ссылались откуда-то еще, и после их удаления я снова мог открыть файл в Model Viewer, и это позволило мне создать базу данных.

1 голос
/ 03 октября 2012

Ошибка 11007: тип сущности 'EntityName' не сопоставлен. Это также может быть вызвано тем, что в папке вашего решения находится файл класса с перебросом (например, entityname.cs) ...

Я столкнулся с такой же проблемой: Error 11007: Entity type 'EntityName' is not mapped. в VS2010 с использованием TFS. Я полагаю, что это, вероятно, было вызвано использованием копирования и вставки и другими правками новых сущностей в конструкторе. Даже отмена изменений в TFS, закрытие VS2010 и т. Д. Не работали.

При расследовании, несмотря на то, что я откатился до последней проверенной версии в TFS, при просмотре исходной папки (содержащей файл .edmx) я обнаружил файл entityname.cs, который относился к объекту-нарушителю, которого я пытался добавить, затем удалил и воссоздал. Это также можно увидеть с помощью функции «Показать все файлы» в обозревателе решений VS2010.

Как только поврежденный файл был удален, EDMX можно редактировать. После того, как схема базы данных была обновлена ​​для соответствия, мы больше не получили ошибку при использовании модели обновления из базы данных (что мы делаем для ссылки на пользовательские функции SQL и т. Д. - что-то вроде O / T, я знаю).

Надеюсь, это поможет кому-то другому, столкнувшемуся с той же проблемой.

0 голосов
/ 17 марта 2013

Откройте edmx в редакторе xml и проверьте, существует ли AssociationSetMapping для вашей ассоциации.

...