EF 4.1 исключение "Поставщик не возвратил строку ProviderManifestToken" - PullRequest
87 голосов
/ 24 марта 2011

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

Ответы [ 15 ]

183 голосов
/ 25 августа 2011

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

8 голосов
/ 06 сентября 2011

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

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

5 голосов
/ 14 ноября 2011

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

4 голосов
/ 15 июня 2011

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

4 голосов
/ 30 марта 2011

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

context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";
2 голосов
/ 26 апреля 2013

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

Откровение: ИСПОЛЬЗУЙТЕ 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 - которую я даже не осознал, что он создал (я уже стер Миграции в моем CSPROJ) и очистил ее.

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

enter image description here

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

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

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

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

2 голосов
/ 15 апреля 2012

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

2 голосов
/ 11 ноября 2011

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

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

1 голос
/ 01 марта 2014

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

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

    }

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

1 голос
/ 31 октября 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...