添加ICollection导航属性

时间:2017-12-21 19:07:40

标签: c# .net entity-framework entity-framework-6

我有以下类,已经使用EF迁移创建和定义了表:

[Table("Account")]
public class AccountEntity
{
    [Key]
    public virtual int Id { get; set; }
}

[Table("Request")]
public class RequestEntity
{
    [Key]
    public virtual int Id { get; set; }

    public int? AccountID { get; set; }

    [ForeignKey("AccountID")]
    public virtual AccountEntity Account { get; set; }
}

Request表中,这正确地创建了FK FK_dbo.Request_dbo.Account_AccountID

使用SSMS,我可以确认FK设置正确。

为了能够从Request's实体访问Account一对多属性,我将以下属性添加到AccountEntity类:

public virtual ICollection<RequestEntity> Requests { get; set; }

但是,现在EF怀疑我需要因域名更改而运行迁移。

以下是它创建并希望运行的迁移类:

public partial class RequestUpdate : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Request", "AccountEntity_Id", c => c.Int());
        CreateIndex("dbo.Request", "AccountEntity_Id");
        AddForeignKey("dbo.Request", "AccountEntity_Id", "dbo.Account", "Id");
    }

    public override void Down()
    {
        DropForeignKey("dbo.Request", "AccountEntity_Id", "dbo.RealtorAccount");
        DropIndex("dbo.Request", new[] { "AccountEntity_Id" });
        DropColumn("dbo.Request", "AccountEntity_Id");
    }
}

正如你所看到的,EF似乎没有认识到/尊重FK关系已经设置好了。

我不怀疑需要设置任何迁移。 FK已经建立,我只是添加了集合“navigation”属性。

需要为此项目启用迁移。 EF版本是6,.NET 4.5。

1 个答案:

答案 0 :(得分:1)

如果您使用了如下所示的流畅配置,则可能发生这种情况:

modelBuilder.Entity<RequestEntity>()
    .HasOptional(e => e.Account)
    .WithMany();

并且在介绍集合导航属性后忘了更新.WithMany().WithMany(e => e.Requests),在这种情况下,EF会考虑两个一对多关系,因此会增加一秒带有默认名称的FK列。