2012-09-07 15 views
14

Próbuję nauczyć się ASP.NET MVC, więc podążam za tutorialem Music Store na stronie asp.net.Błąd podczas tworzenia kontrolera w programie Visual Studio 2012

Jestem w części, w której tworzysz StoreManagerController, używając Album.cs jako klasy modelu, a MusicStoreEntities.cs jako klasy kontekstu danych.

Błąd podczas tworzenia kontrolera: Nie można pobrać metadanych dla "MvcMusicStore.Models.Album". Używanie tego samego DbCompiledModel do tworzenia kontekstów na różnych typach serwerów baz danych nie jest obsługiwane. Zamiast tego utwórz osobny plik DbCompiledModel dla każdego używanego typu serwera.

Brzmi jak używam dwóch różnych baz danych, ale tutaj jest moje połączenie sekcja smyczkowa z Web.config:

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

Najdziwniejsze jest, jeśli I ustosunkowania się ciąg połączenia MusicStoreEntities a następnie spróbuj utwórz StoreManagerController, który działa. Działa również, gdy zmienię docelowy framework w ustawieniach rozwiązania na .NET Framework 4, otwierając rozwiązanie w Visual Studio 2010, a następnie tworząc kontroler.

Czy jest to problem z Visual Studio 2012 lub ciąg połączenia? Może jakiś problem ze zgodnością z CE4.0 i VS2012?

Odpowiedz

8

Duplikat Add Controller in MVC4 not working i MVC4 Scaffolding Add Controller gives error "Unable to retrieve metadata..."

Spróbuj wypowiedzieć swój ciąg połączenia i użyj domyślnego podczas tworzenia kontrolera.

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

Po utworzeniu zwróć ciąg połączenia.

19

Problem leży w używaniu wersji CE bazy danych wykorzystywanej w samouczkach. Po przełączeniu do innej wersji DB, takiej jak SQL Server 2012, zadziałało dobrze. Spróbuj tego:

Zmień ciąg to połączenie

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

Z

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

Niesamowite, zaoszczędziło mi to wiele czasu, dzięki! – casaout

+1

Dzięki casaout, cieszę się, że to pomaga :) – Nexus23

2

Chyba znalazłem obejście. Przed wygenerowaniem nowego kontrolera usuń ciąg połączenia z pliku Web.config. To pozwoli ci wygenerować kontroler bez błędu. Następnie odłóż łańcuch połączenia. To pozwoli ci uruchomić aplikację.

Używam SQL CE4, i nie mam jawnego konstruktora dla DbContext (MusicStoreEntities, aby użyć powyższego przykładu). Mój ciąg połączenia pasuje do nazwy klasy DbContext.

3

W swojej pochodzącej klasy kontekstowego trzeba podać nazwę bazy danych, do konstruktora bazowego zamiast nazwy ciąg połączenia, który wydaje się być źródłem nieporozumień dla większości ludzi mających ten problem tak w twoim przypadku z ciągu połączenia

UWAGA: Usunięto również ukośnik odwrotny przed plikiem MvcMusicStore.SDF jak nie wiesz to konieczne

jesteś pochodzi klasa kontekst powinien być zdefiniowany jako

public class MusicStoreContext : DbContext 

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

Nadzieja to działa dla ciebie i dla innych, tak jak dla mnie.

0

Usuwanie ciąg połączenia pracował również dla mnie, po prostu wklej go z powrotem po regulator został stworzony i zbudować projekt

1

Ja również właśnie po to przykład tutaj: Accessing Your Models Data from a Controller. Jest odważnie zaznaczony, ale udało mi się przelecieć nad nim na pierwszy rzut oka:

TYLKO musisz zbudować rozwiązanie, aby uzyskać modele i tekst DBContext w kreatorze "Dodaj kontroler"!

+0

Jakie jest Twoje rozwiązanie związane z tym pytaniem? – ZoomIn

+0

@ZoomIn Właściwie miałem podobny problem, który wydawał się związany. Ostatnim krokiem w samouczku było wspomnienie o dodaniu ciągu połączenia ... budowanie projektu umożliwia VS uwzględnianie nowo utworzonych typów DBContext w swoich kreatorach ... – Kjellski

1

To może być łatwiejsze do odczytania .... Problemem jest to, że ciąg połączenia z samouczka brakuje „/” przed SFD pliku.

złe:

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

dobre: ​​

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

Tak, taki prosty fix !! .. Usuwanie ciąg połączenia i wklej go z powrotem po regulator został stworzony i zbudować projekt. Połączenia danych Eksploratora serwera nie są konieczne. W App_Data SHOW_ALL, typ pliku .sdf jest tworzony po zbudowaniu i pierwszym uruchomieniu debugowania. Jest on ładowany na Web Hostsite jako plik, a nie SQL DB.

Powiązane problemy