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

82

У меня есть приложение 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" />

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

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

Ответы:

147

У вас есть допустимая строка подключения 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

marc_s
источник
На самом деле, это так, но затем я получаю исключение. Не удается открыть физический файл "C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf". Ошибка операционной системы 5: «5 (не удалось получить текст для этой ошибки. Причина: 15105)». Попытка подключить базу данных с автоматическим именем для файла C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf не удалась. База данных с таким же именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC. Из каких-то источников я подумал, что это неправильно .. Все равно спасибо.
Trimack
Я не уверен, что понимаю проблему второй строки подключения. Я должен пропустить туда созданный дизайнером и добавить ASPNETMembership, которое вы мне написали?
Trimack
Если у вас есть свои сущности в конструкторе EDMX - к ним нужно обращаться с помощью EntityClient и строки подключения EF. Если вы используете нестандартную систему членства ASP.NET, она НЕ является частью вашей модели EF, поэтому, когда вы создаете строку подключения для своей базы данных членства ASP.NET, вы не можете использовать «EntityClient» в качестве поставщик - используйте SqlClient.
marc_s
Итак, да - вам нужны оба - строка подключения EF, созданная вашей системой EDMX, ПЛЮС вторую - обычную строку подключения ADO.NET - для системы членства ASP.NET.
marc_s
1
Только что дал вам 100-й голос за ваш пост. С Рождеством :)
RBT
7

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

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

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

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

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

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

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...
Лысый
источник
2

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

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
Сатиш Сингх
источник
0

У меня была эта проблема, когда я начал использовать 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 в решение.

Мубарак
источник
0

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

Обычно это ошибка строки подключения, проверьте формат строки подключения, вы можете найти «строка подключения структуры сущности» или следовать приведенным выше предложениям.

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

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

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

странность

Spyder
источник
0

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

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

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

Хасия
источник