我正在使用 Entity Framework Core 2.0 来映射存在的数据库,数据库有两个表:Teams
和SupportTeam
。
团队字段: ID,名称
TeamSupport :TeamID(Team Table上的ForeignKey),SupportTeamID(Team Table上的ForeignKey)
我尝试将它们映射如下:
public class Team
{
public int Id { get; set; }
public string name { get; set; }
public List<TeamSupport> SupportTeams { get; set; }
}
public class TeamSupport
{
public int TeamId { get; set; }
public virtual Team Team { get; set; }
public int SupportTeamId { get; set; } // In lack of better name.
public virtual Team SupportTeam { get; set; }
}
但是当我运行“add-migration”时,我遇到了以下错误:
无法确定导航所代表的关系 'List'类型的属性'Team.SupportTeams'。或 手动配置关系,或使用。忽略此属性 '[NotMapped]'属性或使用'EntityTypeBuilder.Ignore' 'OnModelCreating'。
答案 0 :(得分:1)
TeamSupport
实体具有两个 参考导航属性Team
(定义了{{1}之间的两个多对一关系}和TeamSupport
),但Team
实体只有一个 集合导航属性,因此EF不知道如何映射它(到{ {1}}或Team
)并抛出有问题的异常。
在这种情况下,您必须明确解决映射问题。通常使用Team.Team
数据注释就足够了,但是对同一个表的多次引用总会导致多个级联路径问题,这需要关闭一个或多个关系的删除级联。后者只能用流畅的配置来完成,所以最好用流畅的配置来完成整个映射。
您的模型现在所需的最小配置是:
Team.SupportTeam
请注意,由于没有相应的集合导航属性,因此第二个关系配置使用无参数[InverseProperty]
重载来指示。如果您决定将此类集合添加到模型
modelBuilder.Entity<TeamSupport>()
.HasOne(e => e.Team)
.WithMany(e => e.SupportTeams);
modelBuilder.Entity<TeamSupport>()
.HasOne(e => e.SupportTeam)
.WithMany()
.OnDelete(DeleteBehavior.Restrict);
不要忘记在相应的映射中指定
WithMany
否则EF将建立第三种关系。
有关详细信息,请参阅EF Core文档的Relationhips部分。