Подтвердить что ты не робот

Архитектура MVC4 модели Entity Framework, основанной на базе данных, в Visual Studio 2012

У меня возникают проблемы с Visual Studio 2012, пытаясь добавить контроллер MVC4 с помощью лесов. В идеале я хотел бы иметь модель Entity Framework (edmx файл и т.д.), Сгенерированную из базы данных, с помощью Add Data Item - ADO.NET Entity Data Model (т.е. Не Code First) в отдельной сборке из моего веб-приложения. Однако, когда я установил это и использовал Add Controller, указав "MVC-контроллер с действиями и представлениями чтения/записи, используя Entity Framework" и выбрав класс контекста класса и данных из моей сборки DatabaseModel, появится следующее предупреждающее сообщение.

'Ifl.Payforit4.DatabaseModel.Mno' не является частью указанного Класс Ifl.Payforit4.DatabaseModel.Payforit4Entities и Класс Ifl.Payforit4.DatabaseModel.Payforit4Entities не может быть изменено, чтобы добавить свойство "DbSet" в Это. (Например, 'Ifl.Payforit4.DatabaseModel.Payforit4Entities' класс может находиться в скомпилированной сборке.)

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

    public DbSet<Mno> Mnoes { get; set; }

Я пробовал несколько других вещей.

  • размещение модели данных непосредственно в веб-приложении
  • изменение класса модели на множество других таблиц в базе данных в случае возникновения проблемы с классом Mno
  • сокращение модели данных до простой простой таблицы
  • с помощью бета-версии Power Tools 2 Entity Framework для обратной обработки кода первой модели. Это породило новый набор ошибок. Я вижу, почему это бета-версия.
  • изменение стратегии генерации кода модели данных ADO.NET от None to Default для создания модели данных на основе ObjectContext, а не DbContext
  • Отключение плюрализации, поэтому имя свойства Mno вместо Mnoes

Ни один из них не работал. Единственное, что работало, это писать класс Code First DbContext и POCO вручную. Кстати, каждый пример, который я нашел, демонстрирующий MVC4, использует такую ​​модель данных. Есть ли что-то где-то, что говорит, что Code First - это единственная модель данных, которая работает с подкладками MVC4? Кто-нибудь сумел подбросить базу данных сначала (.edmx) в Visual Studio 2012? База данных достаточно сложная, и я предпочел бы придерживаться первой стратегии базы данных.

Я вижу, что должны были бы быть некоторые различия в лесах моделей First First First First Code или First First. Например, у первого есть свойство POCO, содержащее ключ, обозначенный KeyAttribute, тогда как последний содержит эту информацию в файлах модели edmx. Является ли это обоснованием для функции обратного инженера в Entity Framework Power Tools? Ожидаем ли мы отойти от файлов edmx для обратной инженерии моделей Code First, чтобы использовать строительные леса MVC4? Если это так, ожидаем ли мы продолжить работу с проектами Dynamic Data до тех пор, пока инструменты Power Entity Framework не будут завершены?

4b9b3361

Ответ 1

Трюк состоит в том, чтобы сначала скомпилировать ваше решение, а затем ввести класс контекста вручную. Не выбирайте его из раскрывающегося списка, просто введите имя класса самостоятельно и это будет волшебным образом работать; -)

Смотрите здесь: ASP.NET MVC4- Как использовать базовую базу данных EF в контроллере MVC

Ответ 2

Я не думаю, что мы можем эшафот из edmx файлов с Entity Framework 5.

Я пробовал аналогичный набор вещей, и я все еще сталкиваюсь с ошибками.

Есть несколько предложений, которые, возможно, просто удаление плохой edmx и запуск снова могут генерировать правильные файлы .tt, чтобы позволить строительным работам работать правильно, но я еще не видел этого.

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

Ответ 3

Генератор кода edmx в Entity Frameork 5/VS 2012 не работает. Он создает код, полный ошибок компилятора. Я предполагаю, что он не был готов к отправке, когда был выпущен vs2012, поэтому они установили флаг генерации кода по умолчанию на none.

Единственный вопрос для Microsoft: когда можно ожидать обновления, которое исправляет это?

Ответ 4

Это правда! Хитрость состоит в том, чтобы сначала скомпилировать ваше решение, а затем ввести класс контекста вручную. Не выбирайте его из раскрывающегося списка, просто введите имя класса самостоятельно и это будет волшебным образом работать; -)

спасибо!! Маркус!