Ошибка при создании контроллера в Visual Studio 2012 - программирование
Подтвердить что ты не робот

Ошибка при создании контроллера в Visual Studio 2012

Я пытаюсь изучить ASP.NET MVC, поэтому я слежу за учебником Music Store на веб-сайте asp.net.

Я в той части, где вы создаете StoreManagerController, используя Album.cs в качестве класса модели и MusicStoreEntities.cs в качестве класса контекста данных.

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

Похоже, я использую две разные базы данных, но вот моя строка строки подключения из Web.config:

<connectionStrings>
<add name="MusicStoreEntities" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|\MvcMusicStore.sdf"/>
</connectionStrings>

Честно говоря, если я прокомментирую строку подключения MusicStoreEntities, а затем попытаюсь создать StoreManagerController, это сработает. Он также работает, если я изменю Target Framework в настройках решения на .NET Framework 4, открыв решение в Visual Studio 2010, а затем создав контроллер.

Так это проблема с Visual Studio 2012 или строкой соединения? Возможно, проблема совместимости с CE4.0 и VS2012?

4b9b3361

Ответ 1

Проблема заключается в использовании базы данных CE, используемой в учебных пособиях. При переключении на другую версию DB, такую ​​как SQL Server 2012, она работала хорошо для меня. Попробуйте следующее:

Изменить эту строку подключения

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

С

 <add name="MusicStoreEntities" connectionString="Data Source=DBInstanceName;Initial Catalog=MvcMusicStore;Integrated Security=True" providerName="System.Data.SqlClient" />

Ответ 2

Дубликат Добавить контроллер в MVC4 не работает и MVC4 Add Add Controller добавляет ошибку "Невозможно получить метаданные..."

Попробуйте указать строку подключения и использовать по умолчанию при создании контроллера.

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MvcMusicStore;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf" providerName="System.Data.SqlClient" />

После создания верните строку подключения.

Ответ 3

В вашем производном контексте класса вам нужно передать имя базы данных базовому конструктору, а не имя строки подключения, которое, по-видимому, является источником путаницы для большинства людей, имеющих эту проблему, поэтому в вашем случае с строкой соединения

ПРИМЕЧАНИЕ. Также удалена обратная косая черта перед MvcMusicStore.sdf как не уверенная необходимость

вы выведенный контекстный класс должны быть определены как

public class MusicStoreContext : DbContext 

{   public MusicStoreContext(): base ( "MvcMusicStore" ) {}...

Надеюсь, это сработает для вас и других, как для меня.

Ответ 4

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

Я использую SQL CE4, и у меня нет явного конструктора для DbContext (MusicStoreEntities, чтобы использовать пример выше). Моя строка соединения соответствует имени класса DbContext.

Ответ 5

Да, такое простое исправление!.. Удаление строки подключения и вставка ее обратно после создания контроллера и создания проекта. Соединения данных проводника сервера не нужны. В App_Data SHOW_ALL создается файл .sdf после сборки и первого запуска отладки. Это загружается на веб-узел в качестве файла, а не в базу данных SQL.

Ответ 7

Это может быть проще читать.... Проблема в том, что в строке подключения из учебника отсутствует символ "/" перед именем файла sdf.

плохо:

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

хорошо:

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

Ответ 8

Удаление строки подключения также сработало для меня, просто вставьте ее обратно после создания контроллера и создания проекта