Entity framework 从EF 5升级到6,新的迁移交换列
将代码优先项目从实体框架5升级到6.1.1时,在同一个表中有两个外键的模型会导致实体框架在不应发生更改时检测到模式更改 这是有问题的模型Entity framework 从EF 5升级到6,新的迁移交换列,entity-framework,ef-code-first,entity-framework-5,entity-framework-6,entity-framework-migrations,Entity Framework,Ef Code First,Entity Framework 5,Entity Framework 6,Entity Framework Migrations,将代码优先项目从实体框架5升级到6.1.1时,在同一个表中有两个外键的模型会导致实体框架在不应发生更改时检测到模式更改 这是有问题的模型 public class UserActivity : Activity { public string UserMessage { get; set; } public int? OriginatorId { get; set; } public int UserId { get; set; } public virtua
public class UserActivity : Activity
{
public string UserMessage { get; set; }
public int? OriginatorId { get; set; }
public int UserId { get; set; }
public virtual User Originator { get; set; }
public virtual User User { get; set; }
public class Configuration : EntityTypeConfiguration<UserActivity>
{
public Configuration()
{
HasOptional(x => x.Originator).WithMany().HasForeignKey(x => x.OriginatorId).WillCascadeOnDelete(false);
HasRequired(x => x.User).WithMany().HasForeignKey(x => x.UserId).WillCascadeOnDelete(false);
}
}
}
EF 6.1.1中是否存在可以解释这种行为的缺陷?看起来EF 6没有正确检测到这两个外键
作为一种解决方法,执行两次单独的迁移,第一次删除外键,第二次迁移添加外键似乎可以解决问题
public partial class EF6 : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.UserActivities", "UserId", "dbo.Users");
RenameColumn(table: "dbo.UserActivities", name: "UserId", newName: "__mig_tmp__0");
RenameColumn(table: "dbo.UserActivities", name: "OriginatorId", newName: "UserId");
RenameColumn(table: "dbo.UserActivities", name: "__mig_tmp__0", newName: "OriginatorId");
AlterColumn("dbo.UserActivities", "OriginatorId", c => c.Int());
AlterColumn("dbo.UserActivities", "UserId", c => c.Int(nullable: false));
AddForeignKey("dbo.UserActivities", "OriginatorId", "dbo.Users", "ID");
AddForeignKey("dbo.UserActivities", "UserId", "dbo.Users", "ID");
}
public override void Down()
{
DropForeignKey("dbo.UserActivities", "UserId", "dbo.Users");
DropForeignKey("dbo.UserActivities", "OriginatorId", "dbo.Users");
AlterColumn("dbo.UserActivities", "UserId", c => c.Int());
AlterColumn("dbo.UserActivities", "OriginatorId", c => c.Int(nullable: false));
RenameColumn(table: "dbo.UserActivities", name: "OriginatorId", newName: "__mig_tmp__0");
RenameColumn(table: "dbo.UserActivities", name: "UserId", newName: "OriginatorId");
RenameColumn(table: "dbo.UserActivities", name: "__mig_tmp__0", newName: "UserId");
AddForeignKey("dbo.UserActivities", "UserId", "dbo.Users", "ID", cascadeDelete: true);
}
}