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.