ключевое слово не поддерживается источник данных
-
05-07-2019 - |
Вопрос
У меня есть приложение asp.net-mvc с базой данных членства по умолчанию.Я получаю к нему доступ с помощью ADO.NET Entity Framework.
Теперь я хочу перенести его в IIS, но возникло несколько проблем.Мне пришлось установить SQL Server Management Studio, создать новую базу данных, импортировать туда все данные из предыдущей .Файл MDF.Единственное, что осталось сделать (насколько я знаю), это перейти на строку подключения.Тем не менее, у меня нет особого опыта в этом, и я продолжаю получать ключевое слово not supported:"источник данных".исключение.Вот моя строка подключения:
<add name="ASPNETDBEntities"
connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;"
providerName="System.Data.EntityClient" />
Есть идеи, что не так?
Решение
То, что у вас есть, является допустимой строкой подключения ADO.NET, но это НЕТ допустимая строка подключения Entity Framework.
Строка подключения EF будет выглядеть примерно так:
<connectionStrings>
<add name="NorthwindEntities" connectionString=
"metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
provider=System.Data.SqlClient;
provider connection string="Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False""
providerName="System.Data.EntityClient" />
</connectionStrings>
Ты упускаешь из виду все metadata=
и providerName=
элементы в вашей строке подключения EF......по сути, у вас есть только то, что содержится в provider connection string
часть.
Использование EDMX designer должно создать для вас допустимую строку подключения EF в вашем web.config или app.config.
Марк
Обновить:Хорошо, я понимаю, что ты пытаешься сделать:вам нужен второй "ADO.NET" строку подключения только на ASP.NET база данных членства пользователя.Ваша строка в порядке, но имя поставщика неверно - это должно быть "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
==> Структура сущностей строка подключения (с метаданными= и всем остальным).
Если вам нужно и укажите providerName=System.Data.SqlClient
==> прямой ADO.NET Строка подключения к SQL Server без всех дополнений EF
Другие советы
Эта проблема может возникнуть, когда вы ссылаетесь на строки подключения web.config (или app.config) по индексу...
var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;
Строка подключения на основе нуля не всегда совпадает с той, что есть в вашем конфигурационном файле, поскольку она наследует другие файлы по умолчанию из следующего стека.
Рекомендуемые подходы заключаются в доступе к вашему соединению по имени...
var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
или сначала очистить элемент connnectionStrings в вашем конфигурационном файле...
<connectionStrings>
<clear/>
<add name="MyConnection" connectionString="...
У меня возникла та же проблема.
но этот код работает хорошо, попробуйте.
<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
У меня была эта проблема, когда я начал использовать Entity Framework, это произошло, когда я не изменил старое подключение к SQL server на EntityFramework connection.
Решение:в файле, к которому осуществляется подключение через web.config, "добавить имя="Сущности"ConnectionString=XYZ", убедитесь, что вы ссылаетесь на правильное соединение, в моем случае я должен был это сделать
public static string MyEntityFrameworkConnection
{
get
{
return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
}
}
вызывайте MyEntityFrameworkConnection всякий раз, когда необходимо установить соединение.
private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;
примечание:соединение в файле web.config будет сгенерировано автоматически при добавлении Entity model в решение.
Я знаю, что это старый пост, но недавно я получил ту же ошибку, так что, как бы там ни было, вот другое решение:
Обычно это ошибка строки подключения, пожалуйста, проверьте формат вашей строки подключения, вы можете посмотреть "entity framework connectionstring" или следовать приведенным выше предложениям.
Однако в моем случае моя строка подключения была в порядке, и ошибка была вызвана чем-то совершенно другим, поэтому я надеюсь, что это кому-то поможет:
Сначала у меня возникла ошибка EDMX:в EDMX появилась новая таблица базы данных, а в моей базе данных этой таблицы не существовало (забавно, что ошибка была не очень очевидной, потому что она не была показана в моем EDMX или окне вывода, вместо этого она была спрятана в visual Studio в окне "Список ошибок" в разделе "Предупреждения").Я устранил эту ошибку, добавив недостающую таблицу в свою базу данных.Но на самом деле я был занят, пытаясь добавить хранимую процедуру, и все еще получал ошибку "источник данных", поэтому смотрите Ниже, как я ее устранил:
Ошибка хранимой процедуры:Я пытался добавить хранимую процедуру, и каждый раз, когда я добавлял ее через окно EDMX design, я получал ошибку "источник данных".Решение состояло в том, чтобы добавить хранимую процедуру как пустую (я сохранил сохраненное имя процедуры и объявление, но удалил содержимое сохраненной процедуры и заменил его на "выбрать 1" и повторил добавление его в EDMX).Это сработало!Предположительно, EF что-то не понравилось в моей сохраненной программе.Как только я добавил proc в EF, я смог обновить содержимое proc в своей базе данных до того, каким я хотел, чтобы это было, и это работает, ошибка 'datasource' устранена.
странность
Я получил ту же ошибку, затем обновил строку подключения, как показано ниже,
<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
Попробуйте, это решит вашу проблему.