Я слишком долго боролся с этой неожиданной ошибкой, и мне действительно нужно понять это. Позвольте мне описать нашу структуру проекта.
У нас есть три проекта.
- Компания .Domain(библиотека классов)
- Company.PublicWebsite(веб-приложение MVC3)
- Компания. Внутренний веб-сайт (веб-приложение MVC3)
Два проекта веб-сайта имеют ссылку на Company.Domain
.
Наш EF 5 DbContext
живет в Company.Domain.Data.EntityFramework
и выглядит следующим образом:
using System.Data.Entity;
using Company.Domain.Data.EntityFramework.Entities;
namespace Company.Domain.Data.EntityFramework.
{
public class CompanyEntities : DbContext
{
public DbSet<Notification> Notifications { get; set; }
public DbSet<Report> Reports { get; set; }
public DbSet<ReportSection> ReportSections { get; set; }
public DbSet<ReportPage> ReportPages { get; set; }
// brevity brevity
}
}
Мы включили миграции и успешно использовали этот инструмент в прошлом, поэтому я не уверен, почему у нас возникают проблемы. Наша конфигурация миграции находится в Company.Domain.Data.EntityFramework.Migrations
и выглядит следующим образом:
namespace Company.Domain.Data.EntityFramework.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using Company.Domain.Data.EntityFramework;
public class Configuration : DbMigrationsConfiguration<CompanyEntities>
{
public Configuration()
{
MigrationsDirectory = @"Data\EntityFramework\Migrations";
AutomaticMigrationsEnabled = false;
}
protected override void Seed(CompanyEntities context)
{
// empty at the moment
}
}
}
Затем мы имеем файл App.config
в корневом каталоге проекта Company.Domain
и он выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<connectionStrings>
<add name="CompanyEntities" providerName="System.Data.SqlClient" connectionString="Data Source=devsql;Initial Catalog=CompanyEntities;uid=XXXXX;pwd=XXXXX;MultipleActiveResultSets=True;" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
Наша база данных живет на другом сервере в сети. Я могу подключиться к нему в SQL Server Management Studio, и наши приложения могут подключаться во время выполнения. Однако, когда я пытаюсь запустить add-migration
или даже update-database
, я получаю следующую ошибку:
System.Data.ProviderIncompatibleException: Произошла ошибка при получении информации о поставщике из базы данных. Это может быть вызвано Entity Framework с использованием неправильной строки подключения. Проверьте внутренние исключения и проверьте правильность строки подключения. --- > System.Data.ProviderIncompatibleException: поставщик не вернул строку ProviderManifestToken. --- > System.Data.SqlClient.SqlException: при установлении соединения с SQL Server возникла связанная с сетью или конкретная ошибка экземпляра. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра верное и что SQL Server настроен для разрешения удаленных подключений.
Я даже вернул свои изменения в модель, а затем запустил update-database
только для того, чтобы увидеть, скажет ли она, что "база данных находится на последней миграции", но я все еще получил вышеуказанную ошибку. Я снова и снова вылил строку подключения в App.config
. Я не могу понять, почему миграция не будет подключаться, но оба наших проекта веб-сайта прекрасно работают во время выполнения. Мигранты работали в прошлом. Ниже перечислены миграции в проводнике решений по сравнению с данными, найденными в таблице __MigrationHistory
в базе данных.
http://content.screencast.com/users/Chevex/folders/Snagit/media/7abeaa46-ff0f-4817-a0d7-1adb086e8f0c/03.21.2013-10.30.png http://content.screencast.com/users/Chevex/folders/Snagit/media/3c6ac54d-f63d-417f-9253-39b6a8fea85d/03.21.2013-10.32.png
Похоже, я должен запустить update-database
и сообщить ему, что он обновлен, но я получаю эту ошибку.
Как я понимаю, миграция не должна уделять никакого внимания нашим двум проектам веб-сайта, когда я выполняю команды миграции, но я также налил их файлы Web.config на всякий случай. Строки подключения идентичны App.config.
Любая помощь будет принята с благодарностью. Это была битва за день, и мне действительно нужно понять это.
Edit:
Я даже пытался полностью удалить и удалить пакет EF 5 из проектов и переустановить. Тот же выпуск > : (