Nagle zaczynam MetadataException
tworzyć instancję mojej wygenerowanej ObjectContext
klasy. Ciąg połączenia w App.Config wygląda poprawnie - nie zmienił się od czasu ostatniego działania - i próbowałem zregenerować nowy model (plik edmx) z bazowej bazy danych bez żadnych zmian.
Czy ktoś ma jakieś pomysły?
Dalsze szczegóły: Nie zmieniłem żadnych właściwości, nie zmieniłem nazwy żadnych zestawów wyjściowych, nie próbowałem osadzić EDMX w zestawie. Czekałem zaledwie 10 godzin od opuszczenia pracy, aż wrócę. A potem to już nie działało.
Próbowałem odtworzyć EDMX. Próbowałem odtworzyć projekt. Próbowałem nawet odtworzyć bazę danych od zera. W ogóle nie ma szczęścia.
c#
.net
entity-framework
ado.net
J. Steen
źródło
źródło
Odpowiedzi:
Oznacza to, że aplikacja nie może załadować EDMX. Może to powodować kilka rzeczy.
Krótko mówiąc, w twoim pytaniu nie ma wystarczająco dużo szczegółów, aby udzielić dokładnej odpowiedzi, ale mam nadzieję, że te pomysły pomogą ci znaleźć właściwą drogę.
Aktualizacja: Napisałem post na blogu z pełniejszymi instrukcjami rozwiązywania problemów .
źródło
Ta mała zmiana pomaga rozwiązać ten problem.
Mam rozwiązanie z 3 projektem.
zmień na
źródło
Możesz uzyskać ten wyjątek, gdy Edmx jest w jednym projekcie i używasz go z innego.
Powodem jest
Res://*/
to, że uri wskazuje zasoby w zestawie AKTUALNY. Jeśli Edm jest zdefiniowany w innym zestawie niż kod, który go używa, res: // * / nie będzie działać, ponieważ nie można znaleźć zasobu.Zamiast określać „*”, musisz podać pełną nazwę zestawu (w tym token klucza publicznego). Na przykład:
Lepszym sposobem na konstruowanie parametrów połączenia jest EntityConnectionStringBuilder:
Jeśli nadal występuje wyjątek, otwórz zespół w reflektorze i sprawdź nazwy plików dla plików .csdl, .ssdl i .msl. Gdy zasoby mają inne nazwy niż te określone w wartości metadanych, to nie zadziała.
źródło
res://MyAssembly/folder.<filename>.csdl...
Miałem podobny błąd. Odtworzyłem projekt (długa historia) i wyciągnąłem wszystko ze starego projektu. Nie zdawałem sobie sprawy, że mój model był wcześniej w katalogu o nazwie „Model”, a teraz w katalogu o nazwie „Modele”. Po zmianie połączenia w moim Web.Config z tego:
do tego:
Wszystko działało (zmieniono
Model
naModels
). Zauważ, że musiałem zmienić te trzy miejsca w tym ciągu.źródło
I szybki sposób na sprawdzenie nazwy modelu bez Reflektora .... poszukaj katalogu
i sprawdź, czy istnieją pliki zasobów .csdl, .msl i .ssdl. Jeśli znajdują się one w podkatalogu, nazwa podkatalogu musi być poprzedzona nazwą modelu.
Na przykład moje trzy pliki zasobów znajdują się w podkatalogu Data , więc musiałem podać ciąg połączenia
(versus metadata = res: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;).
źródło
Miałem także ten problem, a to dlatego, że łańcuch połączenia w moim pliku web.config był nieco inny niż w pliku app.config zestawu, w którym znajduje się mój EDMX. Nie mam pojęcia, dlaczego to się zmieniło, ale oto dwie różne wersje.
App.config:
Web.config:
To, co naprawiło, to po prostu kopiowanie ciągu app.config (zauważ niewielką różnicę na końcu - zamiast „
App=EntityFramework
„ chciał ”application name=EntityFramework
”) do pliku web.config i problem został rozwiązany. :)źródło
The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.
połączenia Entity Framework nie dzielą się tą elastycznością, dlatego należy używać tylko oczekiwanych słów kluczowych.Zdarzyło mi się to, gdy przypadkowo zmieniłem działanie kompilacji pliku edmx (pojawia się w obszarze Właściwości w IDE) z „EntityDeploy” na „None”. EntityDeploy jest tym, co wypełnia metadane: patrz http://msdn.microsoft.com/en-us/library/cc982037.aspx
źródło
Zdarza mi się to, gdy nie czyszczę rozwiązania przed zbudowaniem nowego projektanta .edmx. Więc nie zapomnij wyczyścić rozwiązania przed zbudowaniem nowego projektanta .edmx. Pomaga mi to pominąć o wiele więcej problemów z tym. Poniżej podane szczegóły nawigacji, jeśli jesteś nowy w studiu wizualnym.
Mam nadzieję że to pomoże. Dziękuję wszystkim
źródło
Właśnie spędziłem z tym szczęśliwe 30 minut. Zmieniłem nazwę obiektu bytu, przemianowałem wpis w pliku konfiguracyjnym, ale jest więcej ... musisz również zmienić odwołanie do csdl
bardzo łatwo przeoczyć - jeśli zmieniasz nazwę, upewnij się, że otrzymałeś wszystko ....
źródło
Miałem ten sam problem. Zajrzałem do mojej zgodnej biblioteki DLL z reflektorem i zobaczyłem, że nazwa zasobu jest nieprawidłowa. Zmieniłem nazwę i teraz wygląda dobrze.
źródło
W moim przypadku rozwiązuje się to poprzez zmianę właściwości pliku edmx.
to rozwiązało problem dla mnie. Problem polega na tym, że gdy kontener próbuje znaleźć metadane, nie może go znaleźć. więc po prostu zrób to w tym samym zestawie. to rozwiązanie nie będzie działać, jeśli masz pliki edmx w innym zestawie
źródło
Spędziłem cały dzień na tym błędzie
jeśli pracujesz
n-tear architecture
lub próbowałeś
separate Models
wygenerować przezEDMX
formularz DataAccessLayer doDomainModelLayer
może dostaniesz ten błąd
webconfig (UILayer)
iappconfig (DataAccessLayer)
są takie sameDrugi co jest bardzo ważny
connection string
w czym jest problem
skąd na ziemi mam
Model
lub cokolwiek .csdl w moim ciągu połączenia, gdzie oni sąoto nasze rozwiązanie patrzę na zdjęcie
mam nadzieję, że ci pomogę
źródło
Udało mi się to rozwiązać w programie Visual Studio 2010, VB.net (ASP.NET) 4.0.
Podczas kreatora modelu encji będzie można zobaczyć parametry połączenia encji. Stamtąd możesz skopiować i wkleić do ciągu połączenia.
Brakowało mi tylko „App_Code”. w ciągu połączeń.
źródło
Po wielu godzinach googlingu i próbach rozwiązania żadne z sugerowanych rozwiązań nie zadziałało. Wymieniłem tutaj kilka rozwiązań. Zauważyłem również ten, który dla mnie pracował. (Używałem EF w wersji 6.1.1 i SQL Server 2014 - ale starszej DB)
connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;
(są to pliki. Aby je zobaczyć, możesz przełączyć Pokaż wszystkie pliki w eksploratorze rozwiązań, w katalogu ~ / obj / ..)... i wiele innych, które próbowałem [jak: przywracanie wersji EntityFramework do późniejszej wersji (nie jestem pewien)]
co dla mnie zadziałało:
z tego artykułu pomógł mi rozwiązać mój problem. Właśnie zmieniłem moje
ProviderManifestToken="2012"
naProviderManifestToken="2008"
w pliku EDMX. Aby to zrobić:Solution Explorer
Mam nadzieję że to pomogło.
źródło
Jeśli używasz edmx z innego projektu, w parametrze połączenia zmień ...
...do...
źródło
folder.subfolder
przed nim.Ostatecznym rozwiązaniem (nawet po odtworzeniu bazy danych na dwóch innych komputerach, a także EDMX i innych dodatkach) było nieużywanie pierwszej edycji Entity Framework. Nie możemy się doczekać ponownej oceny w .NET 4.0.Po ponownym napotkaniu tego samego problemu i szukaniu odpowiedzi w końcu znalazłem kogoś, kto miał ten sam problem. Wygląda na to, że parametry połączenia nie zostały poprawnie wygenerowane przez kreatora Visual Studio, a łącze do zasobów metadanych nie zawierało ważnej ścieżki.
BŁĄD v1.0 ?: Nie można załadować określonego zasobu metadanych. Skrypty! = Modele
Aktualizacja 16.01.2013 : Po przejściu na prawie wyłącznie stosowanie pierwszych praktyk kodu EF (nawet w przypadku istniejących baz danych) problem ten nie jest już problemem. Dla mnie było to realne rozwiązanie, aby zmniejszyć bałagan z automatycznie generowanego kodu i konfiguracji oraz zwiększyć własną kontrolę nad produktem.
źródło
Mój problem i rozwiązanie, objawy były takie same „Nie można załadować określonego zasobu metadanych”, ale podstawowa przyczyna była inna. Miałem 2 projekty w rozwiązaniu, jednym był EntityModel, a drugim rozwiązaniem. Właściwie usunąłem i ponownie utworzyłem plik EDMX w EntityModel.
Rozwiązaniem było to, że musiałem wrócić do projektu aplikacji sieci Web i dodać tę linię do pliku konfiguracyjnego. Nowy model zmienił kilka elementów, które musiały zostać zduplikowane w pliku Web.Config „innego” projektu. Stara konfiguracja nie była już dobra.
źródło
Czasami widzę ten błąd w moim projekcie. Rozwiązuję to przez
1 - Kliknij prawym przyciskiem myszy plik EDMX
2 - Wybierz
Run Custom Tool
opcję3 - Przebuduj projekt
źródło
W moim przypadku ten problem dotyczył zmiany nazwy pliku edmx mojego modelu ... poprawienie ciągu połączenia app.config dla plików csdl / ssdl / msl naprawiło mój problem.
Jeśli używasz projektanta EF 4.0 do generowania csdl / ssdl / msl, te 3 „pliki” będą faktycznie przechowywane w głównym pliku edmx modelu. W tym przypadku post Waqasa jest prawie na znaku. Ważne jest, aby zrozumieć, że „Model_Name” w jego przykładzie będzie musiał zostać zmieniony na dowolną bieżącą nazwę pliku .edmx twojego modelu (bez .edmx).
Ponadto, jeśli Twój plik edmx nie znajduje się na poziomie głównym projektu, musisz poprzedzić Model_Name o ścieżce względnej, np.
określa csdl / ssdl / msl xml jest przechowywany w pliku modelu „WidgetModel.edmx”, który jest przechowywany w folderze o nazwie „MyModel”.
źródło
Napisałem tę klasę pomocnika, aby utworzyć instancje obiektów ObjectContext, gdy są one zdefiniowane w innym projekcie niż projekt, który go używa. Analizuję parametry połączenia w pliku konfiguracyjnym i zastępuję „*” pełną nazwą zestawu.
Nie jest idealny, ponieważ wykorzystuje odbicie do budowy obiektu, ale jest to najbardziej ogólny sposób na zrobienie tego, jaki mogłem znaleźć.
Mam nadzieję, że to komuś pomoże.
źródło
Dla Was wszystkich
SelftrackingEntities
użytkowników, jeśli postępowaliście zgodnie z instrukcją Microsoft i oddzieliliście klasę kontekstową Object do projektu usługi wcf (łącząc się z kontekstowym .tt), więc ta odpowiedź jest dla was:część odpowiedzi pokazanych w tym poście, która zawiera kod taki jak:
NIE DZIAŁA DLA CIEBIE !! powodem jest to, że
YourObjectContextType.Assembly
teraz znajduje się w innym zespole (wewnątrz zespołu projektu wcf),Więc powinieneś zastąpić
YourObjectContextType.Assembly.FullName
->baw się dobrze.
źródło
Miałem problemy z tym samym komunikatem o błędzie. Mój problem został rozwiązany przez zamknięcie i ponowne otwarcie programu Visual Studio 2010.
źródło
Miałem ten sam problem, ponieważ zmieniłem nazwę zestawu.
Musiałem także zmienić nazwę w atrybutach AssemblyTitle i AssemblyProduct w właściwościach projektu / AssemblyInfo.cs, a także usunąć i ponownie dodać odwołanie do pliku edmx.
Potem działało dobrze.
źródło
Mając ten sam problem, odtworzyłem edmx z bazy danych. Rozwiązuje mój problem.
źródło
Wyjątkiem jest to, że kompilator wskazuje na nieistniejące metadane, więc po prostu skopiuj parametry
app.config
połączenia doWeb.config
ConnectionStringźródło
Miałem również ten sam problem i rozwiązanie jak w przypadku Ricka, tyle że importowałem istniejący plik .edmx do nowego projektu i chociaż podstawowa przestrzeń nazw nie miała znaczenia, została zaimportowana do innego podkatalogu, więc musiałem również zaktualizować połączenie string wewnątrz Web.Config w trzech miejscach, aby uwzględnić różne nazewnictwo podkatalogów:
źródło
Miałem ten sam problem z rozwiązaniem, które zawierało projekty w folderze rozwiązań, gdy zostały one przeniesione do katalogu głównego rozwiązania (w celu przezwyciężenia podejrzenia błędu w Mvc3AppConverter z powodu lokalizacji projektów).
Chociaż rozwiązanie skompilowane po tym, jak wszystkie * referencje do projektu zostały ponownie dodane w razie potrzeby, błąd został zgłoszony podczas uruchamiania witryny.
EDMX znajduje się w jednym z przeniesionych projektów (projekt „Data”), ale oczywiście brak odniesienia do projektu Data nie spowodował błędu kompilacji, tylko błąd w czasie wykonywania.
Po prostu dodanie brakującego odniesienia do projektu podstawowego rozwiązało ten problem, nie trzeba w ogóle edytować połączenia.
Mam nadzieję, że to pomaga komuś innemu.
źródło
Co do mnie, oddzieliłem warstwę dostępu do danych i warstwę interfejsu użytkownika. Mam więc ciąg połączenia encji dla każdej warstwy.
Zanim zmodyfikuję te dwa oddzielne ciągi połączeń, aby były takie same, nadal stwierdziłem, że poniżej błędu.
Robię więc te same ciągi połączeń dla tych dwóch warstw (DAL, UI), działa idealnie.
Moje rozwiązanie polega na tym, aby wszystkie parametry połączenia były takie same bez względu na to, gdzie zostały już przedstawione .
źródło
Miałem ten problem wczoraj i patrzyłem na mój kod podczas debugowania i dane wyjściowe z SQL Profiler.
Przed przeczytaniem i zrozumieniem tego postu nie mogłem zrozumieć, dlaczego EntityFramework zgłosił ten błąd, wywołując DB. Przeglądałem setki wierszy w programie SQL Profiler, próbując ustalić, co było nie tak z modelem bazy danych. Nie mogłem znaleźć czegoś takiego jak oczekiwany telefon i, szczerze mówiąc, nie byłem pewien, czego szukam.
Jeśli jesteś w tej pozycji, sprawdź parametry połączenia. Domyślam się, że zanim EntityFramework utworzy swój SQL, sprawdzi model określony w części metadanych ciągu połączenia. W moim przypadku było źle. EntityFramework nie dotarł nawet do DB.
Upewnij się, że nazwy są poprawne. Kiedy już to rozwiązałem, zobaczyłem wywołania w SQL Profiler, gdzie ApplicationName to „EntityFramework” z SQL wywołującym oczekiwane tabele.
źródło
Może to zrobić słaby plik app.config lub web.config. Skopiowałem ciąg połączenia app.config do mojego web.config w moim interfejsie użytkownika i skończyłem wpisując:
źródło