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

Использование того же DbCompiledModel для создания контекстов для разных типов серверов баз данных не поддерживается

Я изучаю ASP.NET MVC из учебных пособий Microsoft:

http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/accessing-your-model 's- https://stackoverflow.com/editing-helpdata-from-a-controller

При упомянутой выше ссылке, добавляя контроллер под названием "MovieController", я получаю эту ошибку

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

Как я могу это исправить?

4b9b3361

Ответ 1

У меня была такая же проблема.

Я переключил providerName="System.Data.SqlServerCe.4.0" на providerName="System.Data.SqlClient", и он создал контроллер и представления.

Я нашел это: http://msdn.microsoft.com/en-US/library/ms171861.aspx

Я следил за указаниями и добавлял ссылку на SQL Server Compact, но он все еще не работает.

Я также пробовал комментировать соединение по умолчанию SQL Server Express, но при попытке добавить контроллер все равно дал ту же ошибку.

Я просто использую SQL Server Express. Я дам вам знать, есть ли у меня какие-либо проблемы.

Ответ 2

Я обнаружил, что используя следующие работы: (Предположим, что у вас установлен SQL Server Express или выше)

 <add name="MovieDBContext" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;AttachDBFilename=|DataDirectory|MovieDB.sdf"/>

Ответ 3

Это решение не работало для меня, оно срабатывает return View(db.Movies.ToList());

Вместо этого используйте это:

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

и это:

public class MovieDBContext : DbContext
{
   public MovieDBContext() : base("Movie") { }
   public DbSet<Movie> Movies { get; set; }
} 

Ответ 4

Я столкнулся с той же ошибкой в ​​другом учебнике MVC Microsoft ASP.NET при использовании Visual Studio 2012 (http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-5). Я решил, что для завершения учебника было проще просто использовать SQL Express вместо SQL CE.

Что я сделал для решения проблемы, это удалить MvcMusicStore.sdf из Server Explorer, а затем удалить тот же файл базы данных из App_Data в обозревателе решений.

Я обновил строку строк подключения в Web.config, чтобы использовать базу данных Sql Express (.mdf) вместо Sql CE (.sdf). Для этого конкретного руководства MusicStoreEntities - это имя класса, которое расширяет DbContext:

<connectionStrings>
    <add name="MusicStoreEntities" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\MvcMusicStore.mdf;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>

Я построил решение, запустил сайт, и база данных была восстановлена ​​для меня. Чтобы добавить файл базы данных обратно в решение, нажмите кнопку "Показать все файлы" в обозревателе решений, щелкните правой кнопкой мыши файл .mdf в App_Data и выберите "Включить в проект".

Ответ 5

Привет, есть одно решение, которое отлично срабатывало для меня. В вашем Web.config в учебнике говорилось, что вы добавили следующую строку в раздел connectionStrings:

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

Не удаляйте его и не меняйте!

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

  • Прокомментируйте строку выше.
  • Добавьте следующую строку: <'add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlClient"/>
  • Сохраните решение
  • Добавить контроллер
  • Перед запуском приложения раскомментируйте строку, которую вы прокомментировали (1), и прокомментируйте добавленную вами строку (те, что указаны с помощью providerName="System.Data.SqlClient") (2).

Это было очень хорошо для меня, когда добавляли контроллеры.

Надеюсь, это поможет вам.

Ответ 6

Я думаю, что причина этой ошибки связана с тем, что VS несколько затрудняет повторное использование существующего DBC-контекста, в то время как строительные леса. VS пытается использовать свойство в DBContext с похожим именем домена (например, пытаться объединить конкатенацию доменов "s" ). Если он не может найти свойство, и ваш контекст уже имеет DBSet с вами класс Domain, он генерирует эту ошибку.

Мое решение состояло в том, чтобы создать новый DBC-контекст с именем "DeleteContext". После успешного создания контроллера и представлений я заменил "DeleteContext" в моем контроллере на свой существующий. Наконец, я удалил класс DeleteContext.

Это работает отлично.

Ответ 7

Я просто немного потрудился и нашел проблему.

В учебнике вы добавляете следующую строку в свой web.config

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

Кажется, что есть проблема с этим. Я просто прокомментировал это и использовал SqlServer, и он работает для меня. Если вы все еще хотите использовать SqlServerCe, вам нужно взглянуть, как исправить эту проблему.

Ответ 8

Если вы используете 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.

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

Ответ 9

Я столкнулся с этой проблемой при работе с учебным пособием MVC Contoso University asp.net. Похоже, что проблема связана с смешиванием строк соединения SQL Server Compact с подключением сервера Sql-сервера поставщика членства.

Первоначально я использовал hyperGeoMetric fix, и это действительно сработало. Затем я просмотрел загружаемый код web.config и заметил некоторую дополнительную конфигурацию.

Если вы добавите/замените параметр по умолчанию для entityFramework следующим образом:

<parameters>
        <parameter value="Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True" />
</parameters>

добавить раздел system.data следующим образом:

<system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>

и измените существующий (по умолчанию) DefaultConnection следующим образом:

<add name="DefaultConnection" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|aspnet-membership.sdf" />

После этой модификации я смог продолжить учебное пособие с использованием выпуска Sql Server Compact.

Сэм

Ответ 10

Я тоже следил за этим учебником и получил ту же проблему. Я удалил строку подключения, затем я смог добавить контроллер, и он создал другие файлы. Затем я снова добавил ту же строку соединения в файл Web.config, добавив ее в одно и то же место, где она была раньше. Он решил мою проблему.

Ответ 11

Я изучаю этот учебник: http://mvcmusicstore.codeplex.com/. и получил ту же ошибку. Я нашел имя элемента "EntityFramework.SqlServerCompact" в списке пакетов NuGet и установил его, все идет хорошо! обратите внимание, что для пакетов, зависимых от пакетов, вы можете просмотреть всю версию здесь: https://www.nuget.org/packages/EntityFramework.SqlServerCompact. УДАЧА!

Ответ 12

путь источника данных неверен, вы можете добавить "\" перед "Movie.sdf". например:

<add name="MovieDBContext" connectionString="Data Source=|DataDirectory|\Movie.sdf" providerName="System.Data.SqlServerCe.4.0"/>

Ответ 13

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

Это не работает

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

  ...
}

Это работает

public class MovieDBContext : DbContext
{
  // No constructor here
  ...
}

Кажется, что имя строки соединения в конструкторе создает ошибку. У меня только одна строка подключения в моем web.config, поэтому DefaultConnection все еще используется, хотя я не называю это явно.