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

Добавить контроллер в MVC4 не работает

Я использую VS 2010 Premium. У меня есть проект MVC4 с использованием SqlCe 4.0 с каркасной моделью сущности.

Модель:

  public class ProjectBuild
    {
       public int ProjectBuildID {get;set;}
       public string name {get;set;}
    }

  public class ProjectBuildContext:DbContext
     {
       public DbSet<ProjectBuild> builds {get;set;}
     }

Ниже приведена строка подключения:

 add name="ProjectBuildContext" connectionString="Data Source=|DataDirectory|DB.sdf"
 providerName="System.Data.SqlServerCe.4.0"

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

"Невозможно получить метаданные для ProjectBuild". "Используя тот же DbCompiledModel для создания контекстов для разных типов баз данных серверы не поддерживаются. Вместо этого создайте отдельный DbCompiledModel для каждого используемого сервера.

4b9b3361

Ответ 1

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

Это сводки моих шагов:

  • Установлен пакет Nuget EntityFramework.SqlServerCompact.
  • Добавлен конструктор по умолчанию в мой класс DbContext.

    открытый класс SchoolContext: DbContext {   public SchoolContext(): base ( " Школа" ) {}   ... }

  • Моя строка подключения:

    <add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" />
    

Затем он работал.

Ответ 2

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

Ответ 3

Я новичок в использовании EF и MVC, но я обнаружил, что если вы не определяете подключение к данным (закомментируйте это) или переименуйте его в web.config, Visual Studio позволит вам добавить контроллер. Если соединение не определено, EF автоматически будет использовать SQLExpress. После добавления контроллера вы можете добавить строку подключения обратно в web.config, и программа будет функционировать должным образом.

//это решение является выдержкой из http://forums.asp.net/t/1838396.aspx/1?Error+while+adding+controller+class+Unable+to+retrieve+metadata+for+MvcMovie+Models+Movie+

Ответ 4

Вы всегда должны инициализировать суперкласс с помощью base(string). Также выяснилось, что имя connectionString в Web.config может быть не таким же, как строка, которую вы отправляете в суперкомпрессор класса.

Итак, например:

<add name="MovieDBContext"  ....... />

public class MovieDBContext : DbContext
{
   public MovieDBContext() : base("Movie") { }
}

Итак, вы видите, что "MovidDBContect" отличается от "Movie".

Ответ 6

Заметка, если она кому-то помогает. У меня была эта проблема.

Это Исправлено: 1. Комментирование строки подключения 2. Перестроить сайт без строки подключения 3. Добавить контроллер 4. Uncomment Connection String 5. Перестроить сайт

Все работает отлично.

Ответ 7

У меня возникла эта проблема при добавлении контроллера API 2.0/MVC5 с Entity Framework 6 и базы данных MySQL.

[DbConfigurationType(typeof(MySqlEFConfiguration))]

Прокомментировать этот атрибут класса. Построить проект. Затем добавление контроллера работает для меня на MySql.

Uncomment после добавления контроллера и продолжения как обычно.

Ответ 8

Это будет выглядеть как самая тупая вещь, но есть ли у вас соединение с вашей базой данных в другом месте? Я столкнулся с этой же самой точной проблемой. Я открыл базу данных в представлении "Проводник сервера" (я установил соединение с моим SDF файлом). Как только я закрыл это соединение, все работало отлично.

Ответ 9

Хорошо, это мое злое решение проблемы. Я, наконец, заработал. Win8 VS2012 EF5 MVC4

  • Убедитесь, что пакет Nuget EntityFramework.SqlServerCompact установлен
  • Сначала не добавляйте DbContext вручную. Вместо этого используйте меню из леса
  • Когда вы создали один Controller + Views с помощью строительных лесов, вернитесь к своей старой строке соединения в файле web.config - той, которая использует SQL CE 4.0. Тогда все работает отлично для меня.

Ответ 10

Я чувствую, что это связано, но я использовал вышеприведенное решение, чтобы исправить проблему и позволить мне снова создавать контроллеры. Проблема, которая возникла после этого, заключалась в том, что я не мог найти свою базу данных SQL Compact после этого в проводнике сервера. Кажется, он работал, когда я добавил приложение, но я не смог его найти. Как только я удалил конструктор: public class SchoolContext: DbContext {public SchoolContext(): base ( "Школа" ) {}.

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

Ответ 11

Если вы используете VS 2012, вам также нужно будет сказать EF, чтобы использовать SQL Compact вместо localDb.

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="System.Data.SqlServerCe.4.0" />
  </parameters>
</defaultConnectionFactory>

Более простой способ - установить пакет EF SQL Compact Nuget.

Подробнее об этом читайте в в блоге.