Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架检索包含子组的组,每个子组都有自己的子组_C#_Entity Framework 5 - Fatal编程技术网

C# 使用实体框架检索包含子组的组,每个子组都有自己的子组

C# 使用实体框架检索包含子组的组,每个子组都有自己的子组,c#,entity-framework-5,C#,Entity Framework 5,我正在建立一个组的层次结构,以代表一个组织结构。我有一个顶级组,然后有许多子组。然后,每个子组可以有任意数量的子组,依此类推 我已经建立了一个包含两个表的sql数据库 使用以下列进行分组 Id(int) 说明(nvarchar(最大值)) 使用以下列对子项进行分组 Id(int) GroupId(int) ChildGroupId(int) 例如,如果组1有两个子组,即组2和组3,则组表将有3条记录 Id-1,说明-组1 Id-2,说明-第2组 Id-3,说明-第3组 GroupCh

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

我已经建立了一个包含两个表的sql数据库

使用以下列进行分组

  • Id(int)
  • 说明(nvarchar(最大值))
使用以下列对子项进行分组

  • Id(int)
  • GroupId(int)
  • ChildGroupId(int)
例如,如果组1有两个子组,即组2和组3,则组表将有3条记录

  • Id-1,说明-组1
  • Id-2,说明-第2组
  • Id-3,说明-第3组
GroupChildren表将有2条记录

  • Id-主键Id,组Id-1,子组Id-2
  • Id-主键Id,GroupId-1,ChildGroupId-3
这将我的两个子组链接到组1。我有两个POCO类来表示这一点,如下所示

公共类组
{
公共int Id{get;set;}
公共字符串说明{get;set;}
公共虚拟ICollection GroupChildren{get;set;}
}
公共班集体儿童
{
公共int Id{get;set;}
public int GroupId{get;set;}
公共组ChildGroup{get;set;}
}
我已经为这两个类创建了映射器,设置如下

内部类GroupMapper:EntityTypeConfiguration
{
内部GroupMapper()
{
HasKey(t=>t.Id);
属性(t=>t.Id).HasColumnName(“Id”).IsRequired();
属性(t=>t.Description).HasColumnName(“Description”).IsRequired();
ToTable(“组”);
}
}
内部类GroupChildMapper:EntityTypeConfiguration
{
内部GroupChildMapper()
{
HasKey(g=>g.Id);
属性(g=>g.Id).HasColumnName(“Id”).IsRequired();
属性(g=>g.GroupId).HasColumnName(“GroupId”).IsRequired();
HasRequired(g=>g.ChildGroup)
.有很多
.Map(x=>x.MapKey(“ChildGroupId”))
.WillCascadeOnDelete(假);
ToTable(“团体儿童”);
}
}
要检索我调用的组和子组

返回GetDbSet()
.其中(c=>c.Id==Id)
.Single();
这将返回具有Id和描述的组,但在查看GroupChildren属性时,我遇到以下错误

列名“组Id”无效。
列名“组Id”无效

“Group_Id”列在代码或数据库中的任何位置都不存在。我试图通过查看其他帖子来解决这个问题,一些人建议这是EF解释主键/外键值的方式,但我找不到如何解决这个问题


谢谢

出现
无效列名“Group_Id”
错误的原因可能是您在
子组
中声明了
public int GroupId{get;set;}
,从而覆盖了外键的默认列名


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

当我在VS2012(EF5)中尝试时,您的模型可以正常工作。
ChildGroup
中有一个
Group\u Id
列。但是,当我添加一个
并向其中添加一些
GroupChild
对象时,我会得到“HierachyDb.groupchilds”参与“GroupChild\u ChildGroup”关系。找到了0个相关的“GroupChild\u ChildGroup\u目标”。需要1个“GroupChild\u ChildGroup\u目标”。但在尝试修复它之前,让我问一下:为什么不使用一个带有
类的simpe层次结构和一个
集合?对于层次结构来说,使用间歇类的模型非常笨拙。孩子可以是自己父母的父母!格特,谢谢你的回复。在查看了您的回复后,我重新考虑了我的代码,以您建议的更简单的方式工作。我们走这条路最初是出于这样或那样的原因,但最终只是增加了不必要的复杂性。非常感谢