在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/