Ответ 1
Я получал эту ошибку и пробовал несколько предыдущих предложений. Затем я проверил Inner Exception и заметил, что я получаю простой отказ в регистрации SQL для пользователя. Просто еще кое-что проверить.
Я пытаюсь реплицировать пример, найденный в 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.
Я получал эту ошибку и пробовал несколько предыдущих предложений. Затем я проверил Inner Exception и заметил, что я получаю простой отказ в регистрации SQL для пользователя. Просто еще кое-что проверить.
Это может случиться, когда вы устанавливаете строку подключения в app.config неправильного проекта в Visual Studio.
Например, я получил эту проблему в проекте проекта EF 4.1 (выпущенная версия) + проект WCF Data Service, и я заметил, что у меня не было строки соединения, указанной в проекте Data Services, где он использовался.
У меня была такая же ошибка, и на самом деле это был логин для указанного сервера. Я удалил атрибут "Интегрированная безопасность" из строки подключения конфигурации, и он сработал.
У меня была такая же проблема, и я добавляю приведенный ниже код сразу после экземпляра моего контекста (onload by instance)
context.Database.Connection.ConnectionString = @"Data Source=.\SQLExpress;Initial Catalog=Test;Integrated Security=True";
У меня была аналогичная проблема с приложением MvcMusicStore. Я изменил строку в Web.config из "Instance = true" - "Instance = false". Иногда это работает без этой настройки, но я не знаю, что вызывает разницу. Чтение этого http://msdn.microsoft.com/en-us/library/ms254504.aspx действительно не помогло.
По какой-то определенной причине разрешения EF не может создать соединение с базой данных. Я столкнулся с одной и той же проблемой всего за один день. Наконец, я пробовал следующее решение, и он работал: a/Open IIS (я использую IIS 7) b/Открыть расширенные настройки приложения, используемого веб-сайтом (пример: DefaultAppPool) c/Посмотрите на группу Process Model, измените значение Identity на "Localsystem"
Надеюсь, он сработает с вами.
У меня была такая же проблема...
решение, которое сработало для меня, было:
запустите средство настройки сети клиента (введите cliconfg в Run)
и убедитесь, что TCP/IP включен.
Я, наконец, взломал его - после небольшой дикой гусиной погони, думая, что это связано с разрешениями.
Откровение: 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).
Я фактически отказался от EF6 (который я не собирался устанавливать в первую очередь) в EF5 (который более совместим с подмостками), и что при возникновении проблем.
Я предполагаю, что столбец Model (<Binary data>)
не имеет обратной совместимости - следовательно, ошибка The provider did not return a ProviderManifest instance
, поскольку он не смог его декодировать.
Мне нечего было терять и просто полностью уничтожил эту таблицу и запустил Update-Database -Verbose
, а затем вернулся и работал.
Если вы находитесь в продвинутой среде или уже находитесь в процессе производства, то уничтожение этой таблицы может быть не решением, но таким образом я мог вернуться к работе.
В использовании бета-версии Visual Studio 11 с EF4.1 и ASP.NET MVC я почти вытащил свои волосы, пока не нашел
Чтобы исправить мою проблему, я зашел в Application_Start и изменил
Database.DefaultConnectionFactory = новый SqlConnectionFactory ( "Источник данных = (localdb)\v11.0; Интегрированная безопасность = True; MultipleActiveResultSets = True" );
to
Database.DefaultConnectionFactory = новый SqlConnectionFactory ( @ "Источник данных = (localdb)\v11.0; Integrated Security = True; MultipleActiveResultSets = True" );
Эта ошибка присутствует только в том случае, если файл .edmx открыт и исчезает, как только файл снова закрывается.
Эта цитата из CodePlex, это со мной работало (visual studio 2013/MVC 5)
У меня есть несколько проектов в решении и добавлено EF для каждого проекта в разное время. На некоторых машинах он работал, и по какой-то причине он не справился с вышеупомянутой ошибкой. Мне потребовалось некоторое время, чтобы заметить, что некоторые из моего проекта app.config имели это:
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
Это нормально, если вы используете LocalDb (новый "sql express" ), но совершенно неправильно, если у вас нет этого конкретного сервера и используете обычный SQL.
Решение: удалите вышеуказанный код.
Еще одна вещь, которую следует учитывать, если вы используете EF Code First, заключается в том, что иногда она автоматически не создает базу данных поддержки для вашего класса DbContext. Решение состоит в том, чтобы добавить вашу собственную строку соединения - вы можете использовать строку соединения, которая может присутствовать, для обработки базы данных пользователя/регистрации, которая поддерживает Простой членский провайдер, в качестве шаблона. Наконец, вам нужно будет добавить конструктор по умолчанию для созданного класса DbContext:
public ChaletDb():base("ChaletConnection")
{
}
Здесь имя строки подключения, введенное в ваш файл web.config, используется для направления DbContext для создания базы данных. Очень редко мне приходилось вручную создавать базу данных (в SQL Server Management Studio), которая побуждала ее работать.
Это связано с невозможностью подключения к SQL-серверу.
Убедитесь, что учетная запись пользователя, под которой вы работаете, имеет доступ к SQL Server.
Если вы создали DbContext из родительского потока (например, используя зависимость Injection), а затем, если вы выдаете себя за другого пользователя, тогда эта ошибка возникнет. Решением будет создание DbContext в новом потоке или новом контексте олицетворения.
Я только что закрыл все экземпляры Visual Studio и снова открыл свое решение.
Я не знаю, что на самом деле произошло, но у меня было такое же решение, открытое из двух разных локальных рабочих пространств (одно с моими локальными изменениями, одно с неизменным исходным кодом репозитория). Я работаю с DB Postgre, Entity Framework 6, Visual Studio 2013 и ASP.NET MVC 5.
У меня была ошибка для структуры сущности, но ни один из вышеперечисленных ответов не оказался в конечном итоге в решении.
Мой код EntityFramework Первые модели и DataContext были в отдельном проекте из моего основного проекта WebAPI. Проект My Entity Framework где-то рядом с линией кодирования был задан как проект запуска, поэтому, когда я выполнял миграцию, я получал "Поставщик не возвращал строку ProviderManifestToken"... проблема подключения.
Оказывается, что поскольку ConnectionString в БД находится в файле Web.config в главном проекте WebAPI, при выполнении миграции строка подключения не извлекалась. Установив проект WebAPI, как мой startProject, я смог успешно подключиться.