Не удалось найти концептуальный тип модели - PullRequest
17 голосов
/ 23 января 2012

У меня есть две модели Entity Data в проектах MVC3 A и B.

Я недавно добавил новую модель данных объекта B для работы с некоторыми новыми функциями, проблема в том, что теперь существующий код перестал работать, и я получаю следующую ошибку при попытке доступа к коду внутри модели объекта A.

Сообщение об ошибке:

Не удалось найти тип концептуальной модели 'project.models.Bclass'

Я не понимаю, почему именно эта новая функциональность повлияла на текущий код, поскольку модель сущности А не изменилась никоим образом. А функциональность B находится в отдельном классе и не мешает модели A.

Когда новый код удаляется из проекта, а модель сущности B исключается, тогда код работает как следует.

Вот часть трассировки стека от ошибки:

Exception : Could not find the conceptual model type for 'Project1.Models.CrossSession'.
Application Class - method : System.Data.Metadata.Edm.MetadataWorkspace -- GetEdmSpaceType
User : temp.user
Url : http://localhost/project1/auth/message
Stacktrace :    at System.Data.Metadata.Edm.MetadataWorkspace.GetEdmSpaceType(StructuralType objectSpaceType)
   at System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappings()
   at System.Data.Entity.Internal.InternalContext.TryUpdateEntitySetMappingsForType(Type entityType)
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()

Ответы [ 8 ]

12 голосов
/ 24 января 2012

Решение найдено.В некоторых случаях (случайным образом) появляется путаница в коде, генерируемом entity framework.Это, очевидно, известная ошибка, и исправление должно появиться в следующих выпусках.Между тем, способ обойти это - переместить efm в отдельный класс в решении.

8 голосов
/ 07 февраля 2013

У меня была одна и та же проблема с 2 разными .edmx файлами в одном проекте.Для первой .edmx model я использовал "Add Code Generation Item", для второй модели - нет.Проект создавался корректно, но выдавал это исключение во время выполнения.

Я решил сгенерировать классы .tt и для второго .edmx model.

8 голосов
/ 06 декабря 2012

Решено это путем обновления EntityFramework до последней версии (6.0) http://nuget.org/packages/EntityFramework/.

После установки восстановите модели и все заработает;)

7 голосов
/ 21 января 2013

Одно из возможных объяснений состоит в том, что, если вы сначала используете подход к базе данных и забудете добавить классы сущностей, вы получите эту ошибку.

т.е. (из руководства, связанного ниже)

  1. Щелкните правой кнопкой мыши на дизайнерской поверхности модели.
  2. В контекстном меню выберите «Добавить элемент генерации кода».
  3. В открывшемся диалоговом окне Добавить новый элемент выберите Данные из списка типов установленных шаблонов слева.
  4. Выберите ADO.NET DbContext Generator, затем нажмите Добавить кнопка.

Я обычно пользуюсь гидом Джули Лерман; https://msdn.microsoft.com/en-us/library/jj206878(v=vs.113).aspx

2 голосов
/ 15 мая 2012

Ну, я только что установил EF 4.1 и попытался объединить DbContext с EMDX. Когда я попытался вернуть представление, я получил ту же ошибку - вот почему я оказался здесь ... Я думаю, что способ обойти этофункциональность в отдельных решениях в решении ...

1 голос
/ 05 февраля 2014

Эту проблему также можно решить путем создания нового edmx в Visual Studio 2010, чтобы он соответствовал старым ... (и копируя файлы, которые он генерирует)

0 голосов
/ 05 января 2013

Я удалил модели edmx, удалил пакет Entity, переустановил сущность 5.0 и работает.

0 голосов
/ 12 ноября 2012

При использовании Visual Studio 12 проблема до сих пор не решена. В качестве альтернативного обходного пути я настроил вторую модель данных SQL с использованием «старомодных» классов данных, которые предшествуют моделям сущностей - они все еще существуют и работают. Используйте Добавить - Новый элемент - (Категория данных) - LINQ Для классов SQL, откройте ServerExplorer, найдите сервер и базу данных, а затем перетащите их на панель классов данных. Старая школа - но удобно преодолевает эту крайне неудобную проблему, когда полная функциональность моделей сущностей не требуется.

...