Ключевое слово не поддерживается: «источник данных», инициализирующий контекст Entity Framework

161

Я инициализирую контекст объекта Entity Framework, и это дает мне ключевое слово не поддерживается ошибка:

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 аналогично - имя_поставщика не требовалось для строки подключения SqlClient. Также нет кавычек или галочек в строке для ядра EF.
Sql Surfer

Ответы:

322

Настоящая причина, по которой вы получили эту ошибку, заключается в "значениях в строке подключения.

Если вы замените их одинарными кавычками, то все будет работать нормально.

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

(Опубликовано, чтобы другие могли получить исправление быстрее, чем я.)

Vaccano
источник
1
Если вы передаете строку подключения в класс ObjectContent, убедитесь, что он содержит одинарные кавычки. Если вы получаете соединение из файла .config, тогда можно использовать & quot; escape-последовательность
Майк Стонис
Это то, что исправило это для меня.
GiddyUpHorsey
Для тех из вас, кто не знаком с тем, как работает XML, "это escape-последовательность для кавычки, потому что это зарезервированный символ в XML.
Река Вивиан
1
Спасибо за его работу сейчас
Шивам Шривастава
System.Data.EntityClient.EntityConnectionStringBuilder сделал это для меня, спасибо.
ПОСЛЕ 15.09.15
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 для разработки Database First или Model First»
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=, но не повезло.
Может Пойразоглу
2
Ну, я начал создавать его, используя EntityConnectionStringBuilderкласс, и странно, он работает сейчас. Но я до сих пор понятия не имею, почему он не принимает мою строку, даже с вашими дополнениями.
Может Пойразоглу
3

Хотите верьте, хотите нет, но переименование LinqPad.exe.config в LinqPad.config решило эту проблему.

Самир Алибхай
источник
12
Это Microsoft, все может быть!
Альтаф Патель
Это не имеет смысла. Какое отношение имеет Linqpad к этому вопросу и как может быть полезно переименование исполняемого файла?
Герт Арнольд
Ну, именно эта ошибка произошла с Linqpad в моем случае, и это решило ее. И я не переименовал исполняемый файл. Я переименовал .exe.config в .config.
Самир Алибхай
Во всяком случае, это очень специфический сценарий. Это только добавляет шума, поскольку ничего не объясняет ,
Герт Арнольд
1

Просто используйте \ "вместо", это должно решить проблему.

Нилеш Морадия
источник
1

Убедитесь, что у вас есть, Data Sourceа не DataSourceв строке подключения. Пространство важно. Доверьтесь мне. Я идиот.

Hairgami_Master
источник