我有以下类,已经使用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。
答案 0 :(得分:1)
如果您使用了如下所示的流畅配置,则可能发生这种情况:
modelBuilder.Entity<RequestEntity>()
.HasOptional(e => e.Account)
.WithMany();
并且在介绍集合导航属性后忘了更新.WithMany()
到.WithMany(e => e.Requests)
,在这种情况下,EF会考虑两个一对多关系,因此会增加一秒带有默认名称的FK列。