Виняток EF 4.1 «Постачальник не повернув рядок ProviderManifestToken»


88

Я намагаюся повторити приклад, знайдений на MSDN. Я використовую ASP.NET та EF 4.1 (CTP?). Я використовував NuGet для встановлення пакета EntityFramework.

Я отримую цю помилку: The provider did not return a ProviderManifestToken string ... і база даних ніколи не створюється.

Ось мій рядок підключення:

<add name="HospitalContext"
   connectionString=
   "data source=.\SQLExpress;initial catalog=NewTestDB;integrated security=True;"
   providerName="System.Data.SqlClient"/>

Ось мій код:

var pat = new Patient { Name = "Shane123132524356436435234" };
db.Patients.Add(pat);

var labResult = new LabResult { Result = "bad", Patient = pat };

int recordAffected = db.SaveChanges();

Ось мій контекст:

public class HospitalContext : DbContext
{
    static HospitalContext()
    {
        Database.SetInitializer(new HostpitalContextInitializer());
    }

    public DbSet<Patient> Patients { get; set; }
    public DbSet<LabResult> LabResults { get; set; }
}

public class HostpitalContextInitializer :
             DropCreateDatabaseIfModelChanges<HospitalContext>
{
    protected override void Seed(HospitalContext context)
    {
        context.Patients.Add(new Patient { Name = "Fred Peters" });
        context.Patients.Add(new Patient { Name = "John Smith" });
        context.Patients.Add(new Patient { Name = "Karen Fredricks" });
    }
}

Це повністю виправлена ​​система SQL 2008 з VS 2010 SP1.


Здавалося б, після додавання [Ключу] до Моделі, її роботи минуло те питання. Я все ще маю інше питання, але це могло це вирішити.
bugnuker

Крім того, може бути, що я додав "Вбудована безпека = істина" до мого рядка підключення ...
bugnuker

У мене такий же виняток при роботі зSqlServerCe.Entity.dll
Нано Табоада

2
В інтересах речей, які можуть викликати цей виняток, я витрачаю 20 хвилин, дивлячись на помилку в назві рядка з'єднання, який повинен відповідати імені контексту.
justSteve

Відповіді:


184

Я отримував цю помилку і спробував кілька попередніх пропозицій. Потім я перевірив внутрішній виняток і помітив, що отримую просту помилку входу SQL для користувача. Просто ще щось перевірити.


У моєму випадку термін дії пароля сервера sql закінчився
mklein

3
Дякую, що вказали мені в правильному напрямку. Мою службу SQL Express не запустили - гаразд!
camainc

Хороший внутрішній виняток ... у мене неправильно звучить ім'я БД, коли я вказав EF на нове місце резервного копіювання ... смішно, я перевірив InnerEx, і ваш коментар змусив мене повернутися назад і перечитати його ... похвала!
Andy Danger Gagne

Використовуючи інтегровану безпеку, IIS AppPool не мав необхідних прав.
Вінсент Ванкальберг,

+1 - (мій домашній ip змінено) Помилка Повідомлення: Не вдається відкрити сервер "ІМЯ СЕРВЕРА", запитуваний логіном. Клієнт з IP-адресою 'MY_OLD_IP' не має доступу до сервера. Щоб увімкнути доступ, використовуйте портал SQL Azure або запустіть sp_set_firewall_rule у головній базі даних, щоб створити правило брандмауера для цієї IP-адреси або діапазону адрес. Щоб ця зміна набрала чинності, може знадобитися до п’яти хвилин. \ R \ nПомилка входу для користувача "MYADMINACCT". \ R \ nЦьому сеансу присвоєно ідентифікатор відстеження "GUID". Надайте цей ідентифікатор відстеження службі підтримки, коли вам потрібна допомога. "}
Ділан Хейс,

8

Це може траплятися іноді, коли ви розміщуєте рядок підключення в app.config неправильного проекту у Visual Studio.

Наприклад, цю проблему я отримав у проекті EF 4.1 (випущена версія) + проект WCF Data Service, і я помітив, що у мене не було вказано рядок підключення у проекті Data Services Project, де він використовувався.


Це було моє рішення. Мені довелося вставити відповідний рядок підключення в стартовий проект.
MickJuice 02.03.14

5

У мене була та ж помилка, і насправді це не вдалося виконати вхід для вказаного сервера. Я видалив атрибут "Інтегрована безпека" із рядка підключення конфігурації, і він спрацював.


Це спрацювало для мене. Будь-хто, хто має цю проблему, повинен спробувати це, якщо інші рішення не працюють.
Джастін

Ця помилка виникла, коли службу SQL Express було вимкнено на моєму комп'ютері.
Джон М

4

У мене була та ж проблема, і я додаю наведений нижче код відразу після екземпляра мого контексту (onload by sampleple)

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";

4

У мене була подібна проблема з програмою MvcMusicStore. Я змінив рядок у Web.config з "Instance = true" на "Instance = false". Це іноді працює без цього налаштування, але я не знаю, що спричиняє різницю. Читання цього http://msdn.microsoft.com/en-us/library/ms254504.aspx насправді не допомогло.


Дивно ... це було правильним рішенням для мене. Я не уявляю, чому.
Kees C. Bakker

2

З певних причин дозволу EF не може створити підключення до бази даних. Я стикався з тією ж проблемою весь день. Нарешті, я спробував наступне рішення, і воно спрацювало: a / Відкрити IIS (я використовую IIS 7) b / Відкрити розширені налаштування веб-сайту, який використовував веб-сайт (Наприклад: DefaultAppPool) c / Подивитись на групу Модель процесу, змінити значення ідентичності до "Localsystem"

Сподіваюся, це спрацює з вами.


2

У мене була просто та сама проблема ...
рішення, яке працювало для мене, було:
запустити інструмент конфігурації клієнтської мережі (введіть cliconfg у Run)
і переконатися, що TCP / IP увімкнено ..


2

Нарешті я його зламав - після легкої погоні диких гусей, думаючи, що це через дозволи.

Одкровення: ВИКОРИСТОВУЙТЕ ПРОФІЛЬ SQL

(Примітка: Нещодавно я перейшов з EF6 на EF5)

Використовуючи SQL Profiler, я швидко знайшов останній SQL, виконаний до повідомлення про помилку:

SELECT TOP (1) 
[Project1].[C1] AS [C1], 
[Project1].[MigrationId] AS [MigrationId], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[MigrationId] AS [MigrationId], 
    [Extent1].[Model] AS [Model], 
    1 AS [C1]
    FROM [dbo].[__MigrationHistory] AS [Extent1]
)  AS [Project1]
ORDER BY [Project1].[MigrationId] DESC

Ну подивіться на це - щось спільне з міграціями. Це виглядає в __MigrationHistoryтаблиці - яку я навіть не підозрював, що її створила (я вже знищив міграції в своєму CSPROJ) і видалив це.

Тому я підтягую рядки для цієї таблиці і бачу, що вона прив’язана до певної версії продукту (v6).

введіть тут опис зображення

Я фактично перейшов з EF6 (який спочатку не мав наміру встановлювати) до EF5 (який є більш сумісним із будівельними лісами), і це коли проблеми почалися.

Я припускаю, що Model (<Binary data>)стовпець не є сумісним із зворотною стороною - звідси і The provider did not return a ProviderManifest instanceпомилка, оскільки він не зміг її декодувати.

Мені не було чого втрачати, я просто повністю знищив цей стіл і побіг, Update-Database -Verboseа потім знову працював.

Якщо ви перебуваєте в просунутому середовищі або вже на виробництві, то знищення цієї таблиці може не бути рішенням, але цей спосіб дозволив мені повернутися до роботи.


Врешті-решт, я повністю скинув таблицю __MigrationsHistory і змінив збігання за допомогою Add-Migrationта Update-Database -Verbose -Force. ось посилання на команду coding.abel.nu/2012/03/ef-migrations-command-reference
Simon_Weaver

важливим моментом є те, що це не лише помилка дозволів
Simon_Weaver

1

Використовуючи Visual Studio 11 Beta з EF4.1 та ASP.NET MVC, я ледь не вирвав волосся, поки не знайшов

http://connect.microsoft.com/VisualStudio/feedback/details/740623/asp-net-mvc-4-default-connection-string-improperly-escaped

Щоб виправити свою проблему, я зайшов у Application_Start і змінився

Database.DefaultConnectionFactory = новий SqlConnectionFactory ("Джерело даних = (localdb) \ v11.0; Інтегрована безпека = True; MultipleActiveResultSets = True");

до

Database.DefaultConnectionFactory = новий SqlConnectionFactory ( @ "Джерело даних = (localdb) \ v11.0; Інтегрована безпека = True; MultipleActiveResultSets = True");


Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");був доданий до мого Mainмеху, тепер це працює як шарм! Дуже дякую.
rotgers

1

Ця помилка присутня лише тоді, коли файл .edmx відкритий і зникає, як тільки файл знову закривається.

Ця цитата з CodePlex , це працювало зі мною (Visual Studio 2013 / MVC 5)


Працював зі мною теж. Спробував закрити та повторно відкрити файл edmx. Працювали.
Рохіт

1

Ще одне, що слід врахувати, якщо ви використовуєте EF Code First, це те, що іноді він не створює автоматично резервну базу даних для вашого класу DbContext. Рішення полягає в додаванні власного рядка підключення - ви можете використовувати рядок підключення, який може бути присутнім, для обробки бази даних користувачів / реєстрації, яка підтримує простий постачальник членства, як шаблон. Нарешті, вам потрібно буде додати конструктор за замовчуванням для створеного вами класу DbContext:

public ChaletDb():base("ChaletConnection")
    {

    }

Тут ім’я рядка підключення, яке ви ввели у своєму файлі web.config, використовується для спрямування DbContext на створення бази даних. Дуже іноді мені доводилося вручну створювати базу даних (у SQL Server Management Studio), що спонукало її працювати.


0

У мене є кілька проектів у рішенні, і я додав EF до кожного проекту в різний час. На деяких машинах він працював, а на деяких він не працював із зазначеною вище помилкою. Мені знадобився деякий час, щоб помітити, що деякі з app.config мого проекту мали таке:

    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="v11.0" />
  </parameters>
</defaultConnectionFactory>

Це нормально, якщо ви використовуєте LocalDb (новий "sql express", наприклад), але абсолютно неправильно, якщо у вас не встановлений цей конкретний сервер і використовується звичайний SQL.

Рішення: Видаліть наведений вище код.


0

Це пов’язано з тим, що підключення до сервера SQL не вдалося.

Переконайтеся, що обліковий запис користувача, під яким ви запускаєте процес, має доступ до SQL Server.

Якщо ви створили DbContext з батьківського потоку (наприклад, за допомогою інжекції залежностей), а потім, якщо ви видаєте себе за іншого користувача, ця помилка може статися. Рішенням буде створення DbContext всередині нового потоку або нового контексту Уособлення.


0

Я просто закрив усі екземпляри Visual Studio і знову відкрив своє рішення.

Я не знаю, що насправді сталося, але у мене одне і те ж рішення було відкрито з двох різних локальних робочих областей (одна з моїми локальними змінами, одна з незмінним вихідним кодом сховища). Я працюю з базами даних postgres, Entity Framework 6, Visual Studio 2013 та ASP.NET MVC 5.


0

У мене виникла помилка в структурі сутності, але жодна з наведених вище відповідей не врешті-решт вписалася в рішення, яке нарешті спрацювало.

Перші моделі мого EntityFramework Code та DataContext знаходились в окремому проекті від мого головного проекту WebAPI. Мій проект Entity Framework десь за лінією кодування був встановлений як проект запуску, і тому, коли я виконував міграцію, я отримував “Постачальник не повернув рядок ProviderManifestToken” ... проблема з підключенням.

Виявляється, оскільки ConnectionString до БД знаходиться у файлі Web.config у головному проекті WebAPI, то коли я запускав міграцію, рядок підключення не отримувався. Встановивши проект WebAPI як свій стартовий проект, я зміг успішно підключитися.

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