Ключове слово не підтримується: "джерело даних" ініціалізує контекст Entity Framework


161

Я ініціалізую контекст Entity Framework Object, і це дає мені помилку, яке не підтримується ключовим словом:

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"

Я взяв рядок з'єднання безпосередньо з web.config, який працював, і змінив лише шлях до файлу (який я встановив динамічно), і замість значення за замовчуванням явно використав цю рядок з'єднання. Що може спричинити цю помилку?


2
Про інший підхід зверніться до stackoverflow.com/questions/6003085/…
LCJ

1
Я не знаю, хто придумав це metadata=res:, а потім res=somethingelseз "усім синтаксисом місця - але вони повинні бути дуже раді, що зараз вони не в тій же кімнаті, що я: - /
Simon_Weaver

2018 .Net EF Core аналогічна синтаксична помилка - providerName не знадобився рядку з'єднання SqlClient. Також немає жодних лапок або відміток у рядку для ядра EF.
Sql Surfer

Відповіді:


322

Справжня причина, по якій ви отримували цю помилку, пов’язана із "значеннями в рядку з'єднання.

Якщо ви заміните їх на одиничні лапки, то це буде добре.

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

(Опубліковано, щоб інші могли отримати виправлення швидше, ніж я.)


1
Якщо ви передаєте рядок з'єднання до класу ObjectContent, переконайтеся, що в ньому є одиничні лапки. Якщо ви отримуєте з'єднання з файлу .config, тоді добре використовувати & quot; послідовність втечі.
Майк Стоніс

Це те, що зафіксувало це для мене.
GiddyUpHorsey

Для тих з вас, хто не знає, як працює XML, "є послідовність виходу лапки, оскільки це зарезервований символ у XML.
Вівіан-Рівер

1
Дякуємо своїй роботі зараз
Шивам Срівастава

System.Data.EntityClient.EntityConnectionStringBuilder зробив це для мене, дякую.
AFract

37

Я вирішив це, EntityClientповернувшись до SqlClient, хоча я використовував Entity Framework.

Отже, мій повний рядок з'єднання був у форматі:

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

2
Працювали для мене! +1
Юрій Кербітков

6
Вищевказана зміна потенційно призведе до (як у моєму випадку) наступної помилки "Контекст використовується в режимі Code First з кодом, який був сформований з файлу EDMX або для розробки Бази даних спочатку, або для моделі Першої моделі"
Psi-Ed

Ви можете прокоментувати кидання нових UnintentionalCodeFirstException () у OnModelCreating (), але це виглядає як брудне вирішення проблеми
Олександр Ульмаскулов

14

Це, здається, providerName="System.Data.EntityClient"трохи не вистачає . Впевнений, що ви все отримали?


Гаразд, це був ще один атрибут, забув цей. Додано це зараз, 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;і тепер він говорить, що ключ не знайдено: ім'я постачальника. Я теж спробував providerName=...замість того provider name=, але теж не пощастило.
Може Poyrazoğlu

2
Ну, я почав створювати його за допомогою EntityConnectionStringBuilderкласу, і дивно, він працює зараз. Але я досі не маю уявлення, чому він не прийняв мою рядок, навіть із вашими доповненнями.
Може Poyrazoğlu

3

Вірите чи ні, перейменування LinqPad.exe.config на LinqPad.config вирішило цю проблему.


12
Це Microsoft, все може статися!
Альтаф Патель

Це не має сенсу. Що стосується Linqpad до питання та як перейменування виконавчого файлу може бути корисним?
Герт Арнольд

Ну і ця помилка сталася з Linqpad в моєму випадку, і це вирішило її. І я не перейменував виконуваний файл. Я перейменував .exe.config у .config.
Самір Алібхай

У всякому разі, це дуже специфічний сценарій. Він додає лише шум, оскільки він нічого не пояснює ,
Герт Арнольд


1

Переконайтеся, що у вас є, Data Sourceа не DataSourceв рядку підключення. Простір важливий. Довірся мені. Я ідіот.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.