我正在建立一个组层次结构来表示一个组织结构。我有一个顶级组,然后有许多子组。然后每个子组可以具有任意数量的子组,依此类推。
我已经建立了一个带有两个表的 sql 数据库。
具有以下列的组。
- 标识(整数)
- 说明 (nvarchar(max))
GroupChildren 具有以下列。
- 标识(整数)
- GroupId (int)
- ChildGroupId (int)
例如,如果 Group 1 有两个子组,Group 2 和 Group 3,则 Groups 表将有 3 条记录
- ID - 1,描述 - 第 1 组
- ID - 2,描述 - 第 2 组
- ID - 3,描述 - 第 3 组
GroupChildren 表将有 2 条记录
- Id - 主键 ID,GroupId - 1,ChildGroupId - 2
- Id - 主键 ID,GroupId - 1,ChildGroupId - 3
这将我的两个子组链接到第 1 组。我有两个 POCO 类来表示这一点,如下所示
public class Group
{
public int Id { get; set; }
public string Description { get; set; }
public virtual ICollection<GroupChild> GroupChildren { get; set; }
}
public class GroupChild
{
public int Id { get; set; }
public int GroupId { get; set; }
public Group ChildGroup { get; set; }
}
我为这两个类创建了映射器,设置如下
internal class GroupMapper : EntityTypeConfiguration<Group>
{
internal GroupMapper()
{
HasKey(t => t.Id);
Property(t => t.Id).HasColumnName("Id").IsRequired();
Property(t => t.Description).HasColumnName("Description").IsRequired();
ToTable("Groups");
}
}
internal class GroupChildMapper : EntityTypeConfiguration<GroupChild>
{
internal GroupChildMapper()
{
HasKey(g => g.Id);
Property(g => g.Id).HasColumnName("Id").IsRequired();
Property(g => g.GroupId).HasColumnName("GroupId").IsRequired();
HasRequired(g => g.ChildGroup)
.WithMany()
.Map(x => x.MapKey("ChildGroupId"))
.WillCascadeOnDelete(false);
ToTable("GroupChildren");
}
}
要检索我调用的组和子组
return GetDbSet<Group>()
.Where(c => c.Id == id)
.Single();
这将返回具有 Id 和 Description 的组,但在查看 GroupChildren 属性时出现以下错误
列名“Group_Id”无效。
列名“Group_Id”无效。
'Group_Id' 列在代码或数据库中的任何位置都不存在。我试图通过查看其他帖子来解决这个问题,有些人认为这是 EF 解释主/外键值的方式,但我找不到如何解决这个问题?
谢谢