我们有三个项目。
- Company.Domain(类库)
- Company.PublicWebsite(MVC3 Web 应用程序)
- Company.InternalWebsite(MVC3 Web 应用程序)
这两个网站项目都有参考Company.Domain
。
我们的 EF 5DbContext
存在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
以下是解决方案资源管理器中的迁移与数据库表中的迁移相比。
看起来我应该能够运行update-database
并让它告诉我它是最新的,但我得到了那个错误。
据我了解,当我运行迁移命令时,迁移不应该关注我们的两个网站项目,但我也倾注了他们的 Web.config 文件以防万一。连接字符串与 App.config 相同。
编辑:
我什至尝试从项目中完全卸载和删除 EF 5 包并重新安装。同样的问题>:(