Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
Asp.net 实体框架将纯连接查找表转换为多对多关系_Asp.net_.net_Sql_Entity Framework_Orm - Fatal编程技术网

Asp.net 实体框架将纯连接查找表转换为多对多关系

Asp.net 实体框架将纯连接查找表转换为多对多关系,asp.net,.net,sql,entity-framework,orm,Asp.net,.net,Sql,Entity Framework,Orm,我最近刚开始在ASP.NET项目中使用实体框架(我最近也开始使用实体框架,所以最近有点不知所措) 我有一个数据库,有4个查找表。当我将ADO.Net实体添加到我的asp.Net项目中时,我起初对查找表消失的原因感到困惑。看了几眼后,我偶然发现: 并意识到查找表时没有其他列,只有外键成为多对多关系。这一切都很好。我可能在这里遗漏了一些简单的东西,我担心这可能是事实,但现在我不知道如何查询数据,我最初在遍历查找表查找数据时没有遇到任何问题 这是我的数据库的通用模型(不是EDM) 人: PID 组:

我最近刚开始在ASP.NET项目中使用实体框架(我最近也开始使用实体框架,所以最近有点不知所措)

我有一个数据库,有4个查找表。当我将ADO.Net实体添加到我的asp.Net项目中时,我起初对查找表消失的原因感到困惑。看了几眼后,我偶然发现:

并意识到查找表时没有其他列,只有外键成为多对多关系。这一切都很好。我可能在这里遗漏了一些简单的东西,我担心这可能是事实,但现在我不知道如何查询数据,我最初在遍历查找表查找数据时没有遇到任何问题

这是我的数据库的通用模型(不是EDM)

人: PID

组: 基德

要求: 摆脱

行动: 援助

个人/团体: PID 基德

组别/要求: 基德 摆脱

要求/行动: 摆脱 援助

人员/行动: PID 援助

所以现在在人、团队、需求和行动之间存在多对多关系 我不确定如何在我的ASP.NETWeb表单项目代码中构造语句,以便像我以前使用查找表那样遍历关系

我曾经能够在PID=“desired Person's id”中查询Person/Group,然后使用GID从Group/Requirement中查找所有RID。然后使用RID从需求/行动中查找所有援助。然后将这些援助与所有与援助匹配的个人/行动援助进行比较,以检查是否满足要求


如果您告诉我这是ASP.NET中我忽略的一些基本内容,我不会感到侮辱,但我想,如果我在这里提问并得到回答,那么对于任何从SQL查询切换到实体框架的人来说,至少会有一个简明的答案。

每当您获得Person对象时,您都会拥有操作和组的属性

组也应该有一个Requirement属性

所以我认为你要找的是

list<int> personIds = {1,2,3};
List<Requirement> requirements = dbContext.Groups.Where(x => x.Person.Count(y => personIds.Contains(y.PersonId) > 0).Select(x => x.Requirements);
List<Action> actions = requirements.Actions;
list personIds={1,2,3};
List requirements=dbContext.Groups.Where(x=>x.Person.Count(y=>personIds.Contains(y.PersonId)>0)。选择(x=>x.requirements);
列出行动=要求。行动;

你也许可以通过更巧妙的方式来完成这一任务,我在EF工作的时候,很多关系总是让人感到痛苦。

在EntityFramework中,你可以选择添加一个名为“导航属性””。例如,让我们看一下来自一个假想的Person类的这些代码片段

从1的角度看,1:1或1:多

public class Person
{
  public virtual Group Group {get;set;}
}
public class Person
{
  public virtual ICollection<Group> Groups {get;set;}
}
从多角度看,多:多或1:多

public class Person
{
  public virtual Group Group {get;set;}
}
public class Person
{
  public virtual ICollection<Group> Groups {get;set;}
}
执行行动的人员应为:

var performedActions = myPerson.Actions;

这两行都假定您已设置了相应的导航属性。

如前所述,通过多对多关联,您可以在实体中找到集合属性。
个人
拥有
将拥有
个人

如果你提出这样的问题

db.Persons.Where(p=>p.PID==1)。选择many(p=>p.Groups)
您将获得
Person
1的所有组。EF构建一个查询,将
Person/Group
联接表联接两次

综合(或“查询”)语法可能更适合您:

来自p,单位为db.Persons
p.群中的g
其中p.PID==1
选择g
现在,您的案例可能可以通过以下查询解决:

来自p,单位为db.Persons
p.群中的g
从r到g.要求
从ra到r.Actions
从p.行动中的pa
其中p.PID==1
其中ra.AID==pa.AID
选择新{}

但我不能从你的问题中真正判断出来。这应该可以帮助你理解要点。

我认为OP首先是关于数据库的。