ключове слово не підтримується джерелом даних


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" />

Будь-які ідеї, що не так?


У мене сталася ця помилка, коли мені було вибрано неправильний проект запуску, тому 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


По суті, так і сталося, але тоді я отримую виняток Неможливо відкрити фізичний файл "C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf". Помилка операційної системи 5: "5 (не вдалося отримати текст для цієї помилки. Причина: 15105)". Спроба приєднати автоматично названу базу даних для файлу C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf не вдалася. База даних з тим самим іменем існує, або вказаний файл не можна відкрити, або він знаходиться на спільному ресурсі UNC. З деяких джерел, я подумав, це неправильно .. Все одно дякую.
Trimack

Я не впевнений, що розумію другу проблему рядка підключення. Я повинен залишити ту, яку створив дизайнер, і додати членство ASPNET, яке ви мені написали?
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 або вікні виводу, натомість його було заховано у візуальній студії у вікні "Список помилок" під "Попередженнями"). Я вирішив цю помилку, додавши відсутню таблицю до своєї бази даних. Але я насправді був зайнятий спробами додати збережену процедуру і все ще отримував помилку `` джерело даних '', тому дивіться нижче, як я її вирішив:

  2. Помилка збереженої процедури : Я намагався додати збережену процедуру, і кожного разу, коли я додавав її через вікно дизайну EDMX, я отримував помилку "джерела даних". Рішенням було додати збережену процедуру як порожню (я зберігав збережену назву proc та декларацію, але видалив вміст збереженої proc та замінив її на 'select 1' та спробував додати її до EDMX). Це спрацювало! Імовірно, EF не сподобалось щось у моєму збереженому процесорі. Після того, як я додав proc до EF, я зміг оновити вміст proc у своїй базі даних до того, як я хотів, щоб це було, і це працює, помилка `` джерело даних '' вирішена.

дивина


0

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

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

Спробуйте, це вирішить вашу проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.