asp.net-mvc - EF6 “No migrations have been applied to the target database.”

标签 asp.net-mvc entity-framework

在mvc5应用程序中,我创建了CodeFirst数据模型,并对其进行了多次迁移。

然后,我重构了我的项目,并将所有数据/迁移类移到了一个新项目中,这是我的表示层引用的。

项目更改后,dbcontext成功连接并在DB上执行读/写操作。

当我对模型进行了较小的更改并运行add-migration时,EF便使用代码创建了迁移,以便从头开始创建数据库,就像它没有“看到”现有表一样。

当然,我跑的时候

Get-Migrations  -ConfigurationTypeName ConfigurationDbContext

我有
No migrations have been applied to the target database.

数据库中的__MigrationHistory是完整的,并且迁移/配置类的 namespace 没有更改。另外,显然,ConnectionString可以,否则他将无法使用db,并且我会收到“自创建数据库以来,支持上下文的模型已更改”或类似的错误。

编辑:

如注释中所建议,我在DbContext构造函数中指定了确切的连接字符串,而不是在web.config中指定了connectionsirng名称,就像在原始mvc项目中那样。

运行Get-Migrations和update-databse时,数据库中仍然没有历史记录/更改。

当我运行Get-Migrations -ConfigurationTypeName My_Namespace.Migrations.ConfigurationDbContext.ConfigurationDbContext
我懂了
No migrations have been applied to the target database.

如果我尝试指定连接字符串
Get-Migrations -ConfigurationTypeName My_Namespace.Migrations.ConfigurationDbContext.ConfigurationDbContext -ConnectionString "Server=my_server;Initial Catalog=my_catalog;User Id=my_user;Password=my_pass" -ConnectionProviderName="System.Data.SqlClient" -verbose -debug

PM停留在>>标志上,直到我重新启动或清除窗口为止。

如果我省略了ConnectionProviderName="System.Data.SqlClient",控制台会要求我输入它,输入后,它会显示与正确数据库的连接,
Target database is: 'my_catalog (DataSource: my_server Provider: System.Data.SqlClient, Origin: Explicit)

但仍然没有迁移...
No migrations have been applied to the target database.

为什么会这样,可以做些什么来进一步调查/解决此问题?

编辑2:

我的dbcontext的构造函数很简单:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base(
            "Server=my_server_name;Initial Catalog=my_db_name;UserId=my_username;Password=my_password" 
       )
    {}

    public DbSet<Model1> Model1Entities { get; set; }
    public DbSet<Model2> Model2Entities { get; set; }
    public DbSet<Model3> Model3Entities { get; set; }



}

它基于模板mvc5应用程序中的IdentityDbContext,因为我不想为其创建其他dbcontext。

并且ConfigurationDbContext是自动的
 internal sealed class ConfigurationDbContext : DbMigrationsConfiguration<ApplicationDbContext>
    {
        public ConfigurationDbContext()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(ApplicationDbContext context)
        {

        }
    }

谢谢!

最佳答案

好吧,答案是在重构期间,ConfigurationDbContext的命名空间从某种程度上

demo10.Migrations.ConfigurationDbContext


demo10.Migrations.ConfigurationDbContext.ConfigurationDbContext

并且ContextKey表的__MigrationHistory列应为ConfigurationDbContext命名空间(您可以省略DbContext,例如
 demo10.Migrations.Configuration

在表中
demo10.Migrations.ConfigurationDbContext

命名空间)。

关于asp.net-mvc - EF6 “No migrations have been applied to the target database.”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21578710/

相关文章:

c# - 跳过基于模型属性之一的模型的所有验证 (ASP.Net Core 2.0)

javascript - Angular 路由和 ng-view

asp.net - 为什么我不能在 ASP.net MVC 中使用服务器控件?

c# - 领域驱动设计、.NET 和 Entity Framework

c# - IoC、UnitOfWork 与 Ninject 和 Entity Framework

asp.net-mvc - Azure Active Directory token 过期超时是否有默认值?

c# - 数据注释 - 长类型的范围属性

entity-framework - Ninject WebAPI 操作无法完成,因为 DbContext 已被释放

c# - 数据库第一种方法中缺少 Entity Framework 导航属性

asp.net-mvc - 为什么 Elmah 不识别我自己的 Exception 派生类型?