MVC «Добавить контроллер»: «Невозможно получить метаданные ... Конфигурирование системы не удалось инициализировать» - PullRequest
10 голосов
/ 23 ноября 2011

С нуля я сделал новое решение с двумя проектами: один был MVC 3, а другой - поддерживающий проект EF 4.2.Все это строит успешно.В проекте MVC я открываю диалог «Добавить контроллер», и он генерирует код на основе контекста и модели, выбранной мной из поддерживающего проекта EF.Сбой диалога «добавить контроллер» с сообщением:

Невозможно получить метаданные для «MyModelClass».Системе конфигурации не удалось инициализироваться.

Я заметил, что диалог «добавить контроллер» фактически пытается извлечь строку подключения к базе данных из файла web.config.Во-первых, это кажется мне глупым, так как у поддерживающего проекта EF уже есть app.config со строкой соединения.Но, несмотря на это, лучшее, что я могу понять, это то, что строка подключения в web.config как-то плоха.Вот как это выглядит:

<add name="Monsters2Entities" 

    connectionString="
      metadata=res://*/Monsters.csdl|
               res://*/Monsters.ssdl|
               res://*/Monsters.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;
        data source=.;
        initial catalog=Monsters2;
        integrated security=True;
        pooling=False;
        multipleactiveresultsets=True;
        App=EntityFramework
      &quot;" 
      providerName="System.Data.EntityClient" 
/>

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

Ответы [ 11 ]

8 голосов
/ 21 ноября 2013

Я установил EF 6, который добавил:

<providers>
    <provider invariantName="System.Data.SqlClient" 
        type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

В моем конфигурационном файле.У меня были другие проблемы со скаффолдингами, и я решил вернуться к Ef 5. После удаления EF 6 и переустановки EF 5 я удалил из конфигурации и смог собрать новый контроллер.Я обнаружил это с помощью

PM> Update-Database –Verbose
2 голосов
/ 27 ноября 2012

Просто скопируйте информацию о строке подключения из вашего проекта модели EF App.Config в свой и убедитесь, что вы не повторяете никаких разделов (например, раздел entityFramework)

1 голос
/ 30 сентября 2014

Я добавил это в свой файл Global.Asax, чтобы а) база данных была запущена немедленно и б) добавлено определение таблицы. позволяя Контроллеру найти определение таблицы:

 System.Data.Entity.Database.SetInitializer<ProjectName.DAL.DBConnectContextName>(new CreateDatabaseIfNotExists<ProjectName.DAL.DBConnectContextName>());
1 голос
/ 23 ноября 2011

Попробуйте:

<add name="Monsters2Entities" 

    connectionString="
      metadata=res://*/Monsters.csdl|
               res://*/Monsters.ssdl|
               res://*/Monsters.msl;
      provider=System.Data.SqlClient;
      provider connection string='
        data source=.;
        initial catalog=Monsters2;
        integrated security=True;
        pooling=False;
        multipleactiveresultsets=True;
        App=EntityFramework
      '" 
      providerName="System.Data.EntityClient" 
/>

Я заменил &quot; на '

0 голосов
/ 31 августа 2016

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

  1. В строке подключения измените поставщика на «system.data.sqlclient» 2. или Удалите строку подключения из Web.config и добавьте контроллер и после добавления контроллера снова добавьтеСтрока подключения.

Кажется, это ошибка в MVC.Я надеюсь, что с этим вы можете пойти дальше.

0 голосов
/ 03 июля 2014

Вы уверены, что у вас есть ConnectionString в вашем файле Web.Config перед созданием контроллера? Иногда мы создаем другой проект, который содержит контекст БД сущности, и мы забываем добавить эту же строку соединения в файле Web.Config внутри другого проекта.

<connectionStrings>
    <add name="Monsters2Entities" ...  />
</connectionStrings>
0 голосов
/ 31 марта 2014

Переименуйте модель класса - работал для меня

0 голосов
/ 13 февраля 2014

Мне удалось решить мою проблему, изменив стратегию генерации кода edmx на T4, добавив контекст EF5 Db и заменив% edmxInputFile% в файлах * .tt и * .Context.tt.

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

Прежде всего вы должны проверить, что ваша строка подключения должна быть в вашем файле Web.Config в ROOT!вашего проекта после этого проверьте, есть ли другая строка подключения или нет, если есть другая строка подключения, замените ее строкой подключения .... Это решило мою проблему, которая была такой же, как у вас ....

0 голосов
/ 27 декабря 2012

Я обнаружил, что это помогло, когда у меня возникла эта проблема:

Деинсталлировали предварительную версию EF и установили EF5 Went to Sql Server Object Explorer и удалили базу данных.Восстановил решение, использовав PM> Update-Database -Verbose

Возможно, проблема заключалась в предварительном выпуске EF или в том, что просто нужно было почистить вкус.

Я довольно новичок во всем этом, но это позволило мне использовать инструмент скаффолдинга Add Controller с выбранным шаблоном «Контроллер MVC с действиями чтения и записи и обзорами с использованием Entity Framework».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...