C# EF 6.3:它创建了从DataAnnotation到FluentAPI的相同迁移

C# EF 6.3:它创建了从DataAnnotation到FluentAPI的相同迁移,c#,entity-framework,data-annotations,entity-framework-migrations,ef-fluent-api,C#,Entity Framework,Data Annotations,Entity Framework Migrations,Ef Fluent Api,我有数据注释: [Required] [MaxLength(150)] [Index(IsUnique = true)] public string GuidName { get; set; } 现在我们需要将它转移到fluentapi(不要问我为什么)。 我的代码: 它生成以下迁移: public override void Up() { DropIndex("dbo.Companies", new[] { "CompanyUn

我有数据注释:

    [Required]
    [MaxLength(150)]
    [Index(IsUnique = true)]
    public string GuidName { get; set; }
现在我们需要将它转移到fluentapi(不要问我为什么)。 我的代码:

它生成以下迁移:

    public override void Up()
    {
        DropIndex("dbo.Companies", new[] { "CompanyUniqueString" });
        CreateIndex("dbo.Companies", "CompanyUniqueString", unique: true);
    }

    public override void Down()
    {
        DropIndex("dbo.Companies", new[] { "CompanyUniqueString" });
        CreateIndex("dbo.Companies", "CompanyUniqueString", unique: true);
    }

正如我们所看到的,它做同样的事情,在上下两个方向上都有相同的代码。但是为什么会生成它呢?

您已经从字段中删除了
索引
数据注释,这就是为什么在
Up()
方法中生成了
DropIndex(…)
行,在
Down()方法中生成了相应的
CreateIndex(…)
行。同时,您已经通过Fluent API添加了索引,它为您提供了剩余的(
CreateIndex(…)
Up()
方法中,以及
Down()中的
DropIndex(…)


因此,EF检测模型中的两个更改,并且不检查Fluent API是否生成与删除的数据注释完全相同的索引。

在这些更改之前生成了什么迁移?
CreateIndex(“dbo.companys”,“CompanyUniqueString”,unique:true)
    public override void Up()
    {
        DropIndex("dbo.Companies", new[] { "CompanyUniqueString" });
        CreateIndex("dbo.Companies", "CompanyUniqueString", unique: true);
    }

    public override void Down()
    {
        DropIndex("dbo.Companies", new[] { "CompanyUniqueString" });
        CreateIndex("dbo.Companies", "CompanyUniqueString", unique: true);
    }