Ключове слово не підтримується: "джерело даних" ініціалізує контекст 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.