EF First代码中一个实体中的一对多映射

时间:2011-02-19 12:49:50

标签: entity-framework code-first

我有2个班级:

public class GroupType
{
    [Key]
    public decimal GroupTypeID   { get; set; }
    public string  Title         { get; set; }

    public virtual ICollection<Group> Groups { get; set; }
}

public class Group
{
    [Key]
    public decimal          GroupID          { get; set; }
    public string           Title            { get; set; }
    public decimal?         GroupParentID    { get; set; }
    public decimal          GroupTypeID      { get; set; }
    public string           FileName         { get; set; }
    public string           GroupCode        { get; set; }

    public virtual ICollection<GroupType> GroupTypes { get; set; }
    public virtual ICollection<Group> MainGroups { get; set; }
}

当我调试项目时,我收到此错误:

  

“无效的列名'GroupGroupID'。   “**和**导航属性   'MainGroups'   'Parand.DataAccess.Group'不能   与自身相反。

我想要定义树的组( n 组的层)

我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

这将在Group实体中创建自引用关联:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Group>()
                .HasMany(g => g.MainGroups)
                .WithOptional()
                .HasForeignKey(p => p.GroupParentID);
}

GroupGroupType之间的多对多关联将使用连接表创建,因此您应该从GroupTypeID实体中删除Group属性,因为它将被处理仅作为标量属性而不是此关联的外键。