加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – EF6“没有迁移已应用于目标数据库.”

发布时间:2020-12-16 07:19:43 所属栏目:asp.Net 来源:网络整理
导读:在mvc5应用程序中,我创建了一个CodeFirst数据模型,并对其进行了多次迁移. 然后我重构了我的项目,并将所有数据/迁移类移动到一个新项目,该项目由我的表示层引用. 在项目更改后,dbcontext成功连接并对DB执行读/写操作. 当我对模型进行微小更改并运行add-migrat
在mvc5应用程序中,我创建了一个CodeFirst数据模型,并对其进行了多次迁移.

然后我重构了我的项目,并将所有数据/迁移类移动到一个新项目,该项目由我的表示层引用.

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

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

当然,当我跑

Get-Migrations  -ConfigurationTypeName ConfigurationDbContext

我有

No migrations have been applied to the target database.

数据库中的__MigrationHistory完好无损,迁移/配置类命名空间未更改.此外,显然,ConnectionString是正常的,否则他将无法使用数据库,我会得到“自创建数据库以来支持上下文的模型”或类似的错误.

编辑:

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

运行Get-Migrations和update-databse时,db中仍然没有历史记录/更改.

当我运行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; }



}

它基于IdentityDbContext,如模板mvc5应用程序,因为我不想为它创建不同的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

__MigrationHistory表的ContextKey列应该是ConfigurationDbContext命名空间(你可以省略DbContext,就像有

demo10.Migrations.Configuration

在表中

demo10.Migrations.ConfigurationDbContext

命名空间).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读