1

我正在建立一个组层次结构来表示一个组织结构。我有一个顶级组,然后有许多子组。然后每个子组可以具有任意数量的子组,依此类推。

我已经建立了一个带有两个表的 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 解释主/外键值的方式,但我找不到如何解决这个问题?

谢谢

4

1 回答 1

0

您收到Invalid column name 'Group_Id'错误的原因可能是因为您通过public int GroupId { get; set; }ChildGroup.

尝试public int GroupId { get; set; }ChildGroup. 框架应该为你处理好关系。完成数据迁移以匹配更新后的模型后,您应该会看到框架已Group_ID在您的表中创建了一个列Group,该列设置了关系。

于 2012-11-23T08:17:44.867 回答