2013-02-01 15 views
17

Mam poważne problemy z Entity Framework i nie mogę się zorientować, co się dzieje.Nie można załadować określonego zasobu metadanych.

Próbowałem wielu opcji dostępnych na: MetadataException: Unable to load the specified metadata resource i słynnego blogu delegowania Craig Stuntz znajdującej się pod adresem: http://blogs.teamb.com/craigstuntz/2010/08/13/38628/

Mam 3 projekty dla zwięzłości: (plik EDMX się tutaj)

Funscribe.Data

Funscribe.Console (app konsoli)

Funscribe.Web MVC (3 APP)

Pierwotnie była to tylko aplikacja MVC i ostatnio dodałem ten nowy projekt konsoli.

skopiowane ciąg połączenia z web.config i zastosować je do mojego app.config:

<add name="FundirectoryEntities" connectionString="metadata=res://*/Fundirectory.csdl|res://*/Fundirectory.ssdl|res://*/Fundirectory.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Moja mvc app nadal działa, ale kiedy uruchomić aplikację konsoli, pojawia się bał:

"Nie można załadować określonego zasobu metadanych."

Próbowałem zmieniając ciąg połączenia z ustawieniem karty dzikich:

<add name="FundirectoryEntities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

uzyskać: Określona Domyślna nazwa EntityContainer „FundirectoryEntities” nie można znaleźć w informacji mapowania i metadanych.

Próbowałem zmieniając go określić montaż:

<add name="FundirectoryEntities" connectionString="metadata=res://Funscribe.Data.dll/Fundirectory.csdl|res://Funscribe.Data.dll/Fundirectory.ssdl|res://Funscribe.Data.dll/Fundirectory.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost\sqlexpress;initial catalog=Funscribe;user id=sys_Funscribe;password=blah;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

uzyskać: Nie można rozwiązać zespół 'Funscribe.Data.dll'.

Jestem zagubiony w tym, co powinienem tu zrobić. Właśnie uaktualniłem ten projekt do Visual Studio 2012 (wprowadzam tę nową aplikację konsolową po konwersji na VS 2012).

Zauważyłem również, że plik Funscribe.Data.dll znajduje się w folderze bin projektu konsoli, ręcznie usunąłem te pliki i oglądałem je ponownie. Co mnie zastanawia to, że aplikacja internetowa nadal działa poprawnie!

Wszystkie projekty są na .NET 4.0. Aplikacja konsoli używa .NET 4.0, a nie wersji profilu klienta.

Każda pomoc w tej sprawie jest bardzo doceniana.

Odpowiedz

19

Parametr metadanych dla aplikacji z modelu Entity Framework nazywa Model.edmx w zespole o nazwie Prosty Mvc.Data.dll może wyglądać następująco:

<connectionStrings> 
    <add name="MyEntities" connectionString="metadata= 
      res://Simple Mvc.Data.dll/Model.csdl| 
      res://Simple Mvc.Data.dll/Model.ssdl| 
      res://Simple Mvc.Data.dll/Model.msl;provider= <!-- ... --> 

Więc widać, istnieje jedno odniesienie do każdej z trzech części EDMX, którego potrzebujemy w czasie wykonywania.Działają one w ten sam sposób, więc przyjrzyjmy się dokładniej pierwszemu. Odniesienie CSDL wygląda następująco:

 res://Simple Mvc.Data.dll/Model.csdl 

Określa on trzy rzeczy:

  • Jesteśmy załadowaniu CSDL z zasobu. Jest to nazwa zespołu, który zawiera zasób,. Jeśli twoje zgromadzenie ma silną nazwę, możesz tutaj podać silne imię, w całej jego pełnej sławie.

  • Nazwa samego zasobu, "Model.csdl". Nie mylić tego z EDMX lub nazwą modelu. W tym przypadku są one takie same, z wyjątkiem rozszerzenia, ale nie zawsze tak jest!

To prawdopodobnie nie uda, jeśli zasoby nie zdarzy ci się mieć taką samą nazwę jak modelu, lub jeśli zespół nie zdarza się, aby być załadowany.

Aby uzyskać więcej informacji sprawdź to Troubleshooting Entity Framework Connection Strings

Mam nadzieję, że przyczyni się to do ciebie.

+2

Niesamowita odpowiedź. To bardzo mi pomogło! – Grasshopper

0

MetadataException: Nie można załadować określony zasób metadanych

Oznacza to, że aplikacja jest w stanie załadować EDMX.

Jest kilka rzeczy, które mogą to powodować, ale najprawdopodobniej z powodu nieprawidłowego ciągu połączenia.

Możliwe rozwiązania:

1.Sprawdź ciąg połączenia 2.Refresh model.edmx 3.Select opcja "Aktualizuj model z bazy danych" w model.edmx

http://mvc4asp.blogspot.in/

1

W moim przypadku , connectionString próbuje znaleźć pliki zasobów, ale nie może tego zrobić. Co zrobiłem, aby rozwiązać mój problem jest:

Right-Click EDMX schemat -> Przejdź do właściwości -> Połączenie -> Metadane Artifact Processing -> następnie przejdź do Kopiuj do Output Directory, i odbudować.

Spowoduje to zmianę punktu ścieżki łączenia połączeń metadanych na zasoby, które próbuje znaleźć.

0

w moim przypadku, usuwam plik EDMX w projekcie i tworzę go ponownie pod nową nazwą, np. zanim był Home_Model, później jest Home_Cost. kiedy próbuję wywołać poniższy kod, ma on "Nie można załadować określonego zasobu metadanych." błąd. /////

using (var currentEntities = new masterEntities()) 
    { 
     currentUser = currentEntities.Home_User.FirstOrDefault(
      x => x.UserLoginAccount == userLoginAccount && x.UserPwd == userPwd); 

    } 

//// więc w Web.config zmodyfikować konfiguracyjne Metadane Home_Model do Home_Cost.

to działa. oczywiście, VS2015 (moja wersja) nie aktualizował web.config podczas usuwania/tworzenia edmx.

0

Pomógł mi roztwór do przebudowy w Visual Studio.

Jest na kompilacji -> Odbuduj

Powiązane problemy