Исключение EF 4.1 "Поставщик не вернул строку ProviderManifestToken"

Я пытаюсь реплицировать пример, найденный в 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.

Ответ 1

Я получал эту ошибку и пробовал несколько предыдущих предложений. Затем я проверил Inner Exception и заметил, что я получаю простой отказ в регистрации SQL для пользователя. Просто еще кое-что проверить.

Ответ 2

Это может случиться, когда вы устанавливаете строку подключения в app.config неправильного проекта в Visual Studio.

Например, я получил эту проблему в проекте проекта EF 4.1 (выпущенная версия) + проект WCF Data Service, и я заметил, что у меня не было строки соединения, указанной в проекте Data Services, где он использовался.

Ответ 3

У меня была такая же ошибка, и на самом деле это был логин для указанного сервера. Я удалил атрибут "Интегрированная безопасность" из строки подключения конфигурации, и он сработал.

Ответ 4

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

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

Ответ 5

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

Ответ 6

По какой-то определенной причине разрешения EF не может создать соединение с базой данных. Я столкнулся с одной и той же проблемой всего за один день. Наконец, я пробовал следующее решение, и он работал: a/Open IIS (я использую IIS 7) b/Открыть расширенные настройки приложения, используемого веб-сайтом (пример: DefaultAppPool) c/Посмотрите на группу Process Model, измените значение Identity на "Localsystem"

Надеюсь, он сработает с вами.

Ответ 7

У меня была такая же проблема...
решение, которое сработало для меня, было:
запустите средство настройки сети клиента (введите cliconfg в Run)
и убедитесь, что TCP/IP включен.

Ответ 8

Я, наконец, взломал его - после небольшой дикой гусиной погони, думая, что это связано с разрешениями.

Откровение: USE SQL PROFILER

(Примечание: недавно я был понижен с 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, что я даже не понял, что он создал (я уже уничтожил Migrations в моем CSPROJ) и прояснил это.

Поэтому я вытягиваю строки для этой таблицы и вижу, что она привязана к определенной версии продукта (v6).

enter image description here

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

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

Мне нечего было терять и просто полностью уничтожил эту таблицу и запустил Update-Database -Verbose, а затем вернулся и работал.

Если вы находитесь в продвинутой среде или уже находитесь в процессе производства, то уничтожение этой таблицы может быть не решением, но таким образом я мог вернуться к работе.

Ответ 9

В использовании бета-версии Visual Studio 11 с 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" );

to

Database.DefaultConnectionFactory = новый SqlConnectionFactory ( @ "Источник данных = (localdb)\v11.0; Integrated Security = True; MultipleActiveResultSets = True" );

Ответ 10

Эта ошибка присутствует только в том случае, если файл .edmx открыт и исчезает, как только файл снова закрывается.

Эта цитата из CodePlex, это со мной работало (visual studio 2013/MVC 5)

Ответ 11

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

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

Это нормально, если вы используете LocalDb (новый "sql express" ), но совершенно неправильно, если у вас нет этого конкретного сервера и используете обычный SQL.

Решение: удалите вышеуказанный код.

Ответ 12

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

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

    }

Здесь имя строки подключения, введенное в ваш файл web.config, используется для направления DbContext для создания базы данных. Очень редко мне приходилось вручную создавать базу данных (в SQL Server Management Studio), которая побуждала ее работать.

Ответ 13

Это связано с невозможностью подключения к SQL-серверу.

Убедитесь, что учетная запись пользователя, под которой вы работаете, имеет доступ к SQL Server.

Если вы создали DbContext из родительского потока (например, используя зависимость Injection), а затем, если вы выдаете себя за другого пользователя, тогда эта ошибка возникнет. Решением будет создание DbContext в новом потоке или новом контексте олицетворения.

Ответ 14

Я только что закрыл все экземпляры Visual Studio и снова открыл свое решение.

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

Ответ 15

У меня была ошибка для структуры сущности, но ни один из вышеперечисленных ответов не оказался в конечном итоге в решении.

Мой код EntityFramework Первые модели и DataContext были в отдельном проекте из моего основного проекта WebAPI. Проект My Entity Framework где-то рядом с линией кодирования был задан как проект запуска, поэтому, когда я выполнял миграцию, я получал "Поставщик не возвращал строку ProviderManifestToken"... проблема подключения.

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