Słowo kluczowe nie jest obsługiwane: „źródło danych” inicjuje kontekst Entity Framework


161

Inicjalizuję kontekst obiektu Entity Framework, a to daje mi słowo kluczowe nieobsługiwane błąd:

metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Workspace\vs\Leftouch\Leftouch.Web\Data\Leftouch.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;App=EntityFramework"

Wziąłem parametry połączenia bezpośrednio z działającego web.config i zmodyfikowałem tylko ścieżkę do pliku (którą ustawiłem dynamicznie) i zamiast używać wartości domyślnej, jawnie użyłem tego ciągu połączenia. Co może spowodować ten błąd?


2
Zapoznaj się ze stackoverflow.com/questions/6003085/…, aby uzyskać inne podejście
LCJ,

1
Nie wiem, kto wpadł na ten metadata=res:, a następnie res=somethingelsez "całym składni miejsce - ale powinny one być naprawdę zadowolony, że nie są w tym samym pokoju co ja teraz: - /
Simon_Weaver

2018 .NET EF Core podobny błąd składni - nazwa dostawcy nie była wymagana przez parametry połączenia SqlClient. Również brak cudzysłowów ani znaczników w ciągu dla rdzenia EF.
Sql Surfer

Odpowiedzi:


322

Prawdziwym powodem, dla którego otrzymujesz ten błąd, są "wartości w parametrach połączenia.

Jeśli zastąpisz je pojedynczymi cudzysłowami, będzie działać dobrze.

https://docs.microsoft.com/archive/blogs/rickandy/explicit-connection-string-for-ef

(Wysłano, aby inni mogli rozwiązać problem szybciej niż ja).


1
Jeśli przekazujesz parametry połączenia do klasy ObjectContent, upewnij się, że zawiera ona pojedyncze cudzysłowy. Jeśli otrzymujesz połączenie z pliku .config, możesz użyć opcji & bdquo; sekwencja ewakuacyjna.
Mike Stonis

To właśnie naprawiło to dla mnie.
GiddyUpHorsey

Dla tych, którzy nie wiedzą, jak działa XML, "jest to sekwencja ucieczki dla cudzysłowu, ponieważ jest to zastrzeżony znak XML.
Vivian River

1
Dzięki, że działa teraz
Shivam Srivastava

System.Data.EntityClient.EntityConnectionStringBuilder zrobił to dla mnie, dziękuję.
AFract

37

Naprawiłem to, zmieniając się z EntityClientpowrotem na SqlClient, mimo że korzystałem z Entity Framework.

Więc moje kompletne parametry połączenia były w formacie:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient" />

2
Pracował dla mnie! +1
Yury Kerbitskov

6
Powyższa zmiana potencjalnie doprowadzi do (tak jak w moim przypadku) następującego błędu "Kontekst jest używany w trybie Code First z kodem wygenerowanym z pliku EDMX dla rozwoju Database First lub Model First"
Psi-Ed

Możesz skomentować zgłoszenie nowego UnintentionalCodeFirstException () w OnModelCreating (), ale wygląda to na brudne obejście
Alexander Ulmaskulov

14

Wydaje się, że brakuje tego providerName="System.Data.EntityClient"bitu. Jasne, że masz wszystko?


Ok, to był kolejny atrybut, zapomniałem o tym. Dodano, teraz jest metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider name=System.Data.EntityClient;provider connection string=&quot;{0};App=EntityFramework&quot;i teraz mówi, że klucz nie został znaleziony: nazwa dostawcy. providerName=...Zamiast tego też próbowałem provider name=, ale bez powodzenia.
Can Poyrazoğlu

2
Cóż, zacząłem go tworzyć za pomocą EntityConnectionStringBuilderklasy i, co dziwne, teraz działa. Ale nadal nie mam pojęcia, dlaczego nie zaakceptował mojego ciągu, nawet z twoimi dodatkami.
Can Poyrazoğlu

3

Wierz lub nie, zmiana nazwy LinqPad.exe.config na LinqPad.config rozwiązała ten problem.


12
To jest Microsoft, wszystko może się zdarzyć!
Altaf Patel

To nie ma sensu. Co Linqpad ma wspólnego z tym pytaniem i jak zmiana nazwy pliku wykonywalnego może być kiedykolwiek pomocna?
Gert Arnold

Cóż, ten konkretny błąd wystąpił w Linqpad w moim przypadku i wykonanie tego rozwiązało problem. I nie zmieniłem nazwy pliku wykonywalnego. Zmieniłem nazwę pliku .exe.config na .config.
Sameer Alibhai

W każdym razie to bardzo specyficzny scenariusz. Dodaje tylko hałas, ponieważ niczego nie wyjaśnia
Gert Arnold,


1

Upewnij się, że masz parametry połączenia, Data Sourcea nie DataSource. Przestrzeń jest ważna. Zaufaj mi. Jestem idiotą.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.