Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 从EF 5升级到6,新的迁移交换列_Entity Framework_Ef Code First_Entity Framework 5_Entity Framework 6_Entity Framework Migrations - Fatal编程技术网

Entity framework 从EF 5升级到6,新的迁移交换列

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

将代码优先项目从实体框架5升级到6.1.1时,在同一个表中有两个外键的模型会导致实体框架在不应发生更改时检测到模式更改

这是有问题的模型

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);
    }
}