ключевое слово не поддерживается источник данных

У меня есть приложение asp.net-mvc с базой данных членства по умолчанию. Я получаю к нему доступ через ADO.NET Entity Framework.

Теперь я хочу переместить его в IIS, но обнаружилось несколько проблем. Мне пришлось установить SQL Server Management Studio, создать новую БД, импортировать туда все данные из предыдущего файла .MDF. Единственное, что осталось сделать (насколько я знаю), - это изменить строку подключения. Однако я не очень разбираюсь в этом и постоянно получаю неподдерживаемое ключевое слово: «источник данных». исключение. Вот моя строка подключения:

<add name="ASPNETDBEntities" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.EntityClient" />

Есть идеи, что не так?


person Trimack    schedule 10.09.2009    source источник
comment
У меня была эта ошибка, когда у меня был выбран неправильный запускаемый проект, поэтому VS не смог найти мои строки подключения. Убедитесь, что выбран запускаемый проект с app.config.   -  person wnbates    schedule 03.07.2020


Ответы (6)


У вас есть действительная строка подключения ADO.NET, но это НЕ действительная строка подключения Entity Framework.

Строка подключения EF будет выглядеть примерно так:

<connectionStrings> 
  <add name="NorthwindEntities" connectionString=
     "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings>

Вам не хватает всех элементов metadata= и providerName= в строке подключения EF ... в основном у вас есть только то, что содержится в части provider connection string.

Использование конструктора EDMX должно создать для вас допустимую строку подключения EF в файле web.config или app.config.

Марк

ОБНОВЛЕНИЕ: Хорошо, я понимаю, что вы пытаетесь сделать: вам нужна вторая строка подключения «ADO.NET» только для базы данных пользователей / членства ASP.NET. Ваша строка в порядке, но имя providerName неверно - это должно быть «System.Data.SqlClient» - это соединение не использует ENtity Framework - тогда не указывайте для него «EntityClient»!

<add name="ASPNETMembership" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

Если вы укажете providerName=System.Data.EntityClient ==> Entity Framework строку подключения (с метаданными = и всем остальным).

Если вам нужно и укажите providerName=System.Data.SqlClient ==> прямую строку подключения ADO.NET к SQL Server без всех дополнений EF

person marc_s    schedule 10.09.2009
comment
На самом деле это так, но затем я получаю исключение. Невозможно открыть физический файл C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf. Ошибка операционной системы 5: 5 (не удалось получить текст для этой ошибки. Причина: 15105). Попытка подключить базу данных с автоматическим именем для файла C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf не удалась. База данных с таким именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC. Из каких-то источников я подумал, что это неправильно .. Все равно спасибо. - person Trimack; 10.09.2009
comment
Я не уверен, что понимаю вторую проблему со строкой подключения. Я должен пропустить туда созданный дизайнером и добавить ASPNETMembership, которое вы мне написали? - person Trimack; 10.09.2009
comment
Если у вас есть свои сущности в конструкторе EDMX, к ним необходимо получить доступ с помощью EntityClient и строки подключения EF. Если вы используете готовую систему членства ASP.NET, она НЕ является частью вашей модели EF, поэтому, когда вы создаете строку подключения для своей базы данных членства ASP.NET, вы не можете использовать EntityClient в качестве провайдера - используйте SqlClient. - person marc_s; 10.09.2009
comment
Итак, да - вам нужны оба - строка подключения EF, созданная вашей системой EDMX для вас, PLUS вторая - обычная строка подключения ADO.NET - для системы членства ASP.NET. - person marc_s; 10.09.2009
comment
Спасибо. Так очевидно, но если бы не этот ответ, я бы не смог сегодня смотреть телевизор. - person ProfK; 14.07.2011
comment
@marc_s полезный ответ, но вы могли бы пояснить, что если вы используете Entity Framework, вы не можете изменить имя поставщика на System.Data.SqlClient и удалить соответствующие части EF. По крайней мере, таков мой опыт работы с EF6 на палатах. Вы можете спросить, зачем вам это делать? В дополнительном приложении, которое ссылается на соединение для чтения, сначала кажется логичным просто использовать простую строку подключения в стиле ADO. - person Atters; 12.01.2015
comment
Только что дал вам 100-й голос за ваш пост. Счастливого Рождества :) - person RBT; 25.12.2016
comment
Я добавил эту строку подключения (EF) в appsetting.json, она говорит, что источник данных не является допустимым ключевым словом. Любая идея ? - person RollerCosta; 19.07.2019

Эта проблема может возникнуть, когда вы ссылаетесь на строки подключения web.config (или app.config) по индексу ...

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;

Строка подключения с отсчетом от нуля не всегда является строкой в ​​вашем файле конфигурации, поскольку она наследует другие по умолчанию с более высокого уровня по стеку.

Рекомендуемые подходы - получить доступ к вашему подключению по имени ...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

или сначала очистить элемент connnectionStrings в вашем файле конфигурации ...

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...
person Baldy    schedule 10.06.2011

У меня та же проблема.
но этот код работает хорошо, попробуйте.

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
person Satish Singh    schedule 11.10.2013

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

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

Попробуйте, это решит вашу проблему.

person Hasiya    schedule 19.09.2017

У меня была эта проблема, когда я начал использовать Entity Framework, это произошло, когда я не изменил старое соединение SQL-сервера на соединение EntityFrameWork.

Решение: в файле, в котором соединение выполняется через файл web.config "add name =" Entities "connectionString = XYZ", убедитесь, что вы имеете в виду правильное соединение, в моем случае мне пришлось сделать это

        public static string MyEntityFrameworkConnection
    {
        get
        {
             return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        }

    }

вызывайте MyEntityFrameworkConnection всякий раз, когда необходимо установить соединение.

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;

Примечание: соединение в файле web.config будет сгенерировано автоматически при добавлении модели Entity в решение.

person Mubarak    schedule 23.06.2011

Я знаю, что это старый пост, но недавно у меня была такая же ошибка, поэтому, чего бы это ни стоило, вот еще одно решение:

Обычно это ошибка строки подключения. Проверьте формат строки подключения. Вы можете найти строку подключения entity framework или следовать приведенным выше предложениям.

Однако в моем случае моя строка подключения была в порядке, и ошибка была вызвана чем-то совершенно другим, поэтому я надеюсь, что это кому-то поможет:

  1. Сначала у меня была ошибка EDMX: в EDMX была новая таблица базы данных, и таблица не существовала в моей базе данных (забавно, что ошибка была не очень очевидной, потому что она не отображалась в мой EDMX или окно вывода, вместо этого он был спрятан в Visual Studio в окне «Список ошибок» под «Предупреждениями»). Я решил эту ошибку, добавив недостающую таблицу в свою базу данных. Но на самом деле я был занят, пытаясь добавить хранимую процедуру, но все еще получал ошибку источника данных, поэтому посмотрите ниже, как я ее разрешил:

  2. Ошибка хранимой процедуры: я пытался добавить хранимую процедуру, и каждый раз, когда я добавлял ее через окно проектирования EDMX, я получал ошибку «источник данных». Решением было добавить хранимую процедуру как пустую (я сохранил имя и объявление хранимой процедуры, но удалил содержимое сохраненной процедуры и заменил его на «выберите 1» и повторил попытку добавления его в EDMX). Это сработало! Предположительно EF что-то не понравилось в моей хранимой процедуре. После того, как я добавил процедуру в EF, я смог обновить содержимое процедуры в моей базе данных до того, что я хотел, и он работает, ошибка «источника данных» устранена.

странность

person Spyder    schedule 22.12.2014