1 回答
TA贡献1775条经验 获得超11个赞
我终于找到了解决办法。请记住,该项目正在使用自动迁移。基本上,Step1 和 Step2 迁移方法已步入正轨,但是,在 Step1 和 Step2 之后应用了第三种自动迁移。我删除了 Step2 迁移,实质上将其变成了自动迁移。当 update-database 运行时,它只应用 Step1,然后检查模型,自动创建 Step2 的内容并运行它们,欺骗其他开发人员的机器使模型和数据库重新保持一致。
public partial class ResetJobSites : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.JobSites", "JobSiteID", "dbo.Jobs");
DropIndex("dbo.JobSites", new[] { "JobSiteID" });
DropTable("dbo.JobSites");
}
public override void Down()
{
CreateTable(
"dbo.JobSites",
c => new
{
JobSiteID = c.Int(nullable: false),
})
.PrimaryKey(t => t.JobSiteID);
CreateIndex("dbo.JobSites", "JobSiteID");
AddForeignKey("dbo.JobSites", "JobSiteID", "dbo.Jobs", "JobIb");
}
}
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201907291444500_ResetJobSites].
Applying explicit migration: 201907291444500_ResetJobSites.
Applying automatic migration: 201907291528423_AutomaticMigration.
PM>
总结一下:要在打开自动迁移时将一对一转换为一对多关系,您需要保留生产数据库(但愿意接受正在转换的表上的数据丢失)。
创建显式迁移以解耦两个表(我通过注释掉类、Job 表上的 nav 属性、DbContext 中的 DbSet 以及构建项目所需的任何其他内容来实现此目的)。
进行更改模型,将 nav 属性添加回 Job 表(ICollection nav 属性),将 DbSet 添加回 DbContext,然后让自动迁移运行。
首先不要让自己陷入这种境地。
- 1 回答
- 0 关注
- 124 浏览
添加回答
举报