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/7/sql-server/21.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 NET和一对多对多方案_Asp.net_Sql Server_One To Many - Fatal编程技术网

Asp.net NET和一对多对多方案

Asp.net NET和一对多对多方案,asp.net,sql-server,one-to-many,Asp.net,Sql Server,One To Many,我不熟悉ASP.NET,但不熟悉编程。我正在将我们当前的站点从PHP/MySQL迁移到ASP.NET(3.5)/SqlServer。自从网站发布以来,我一直潜伏在这里,所以我相信你们中的一个(或多个)可以帮助我。以下是场景: 这是一个培训部门网站,该部门的课程目录存储在表课程中。每门课程可能有许多先决课程,例如,A和B是C的先决课程。我通常会将其作为逗号分隔列存储在课程中,或作为递归关系存储在单独的表课程_prereq或课程_课程中。这部分我可以做 但是,业务规则要求每门课程可以有多套先决条件。

我不熟悉ASP.NET,但不熟悉编程。我正在将我们当前的站点从PHP/MySQL迁移到ASP.NET(3.5)/SqlServer。自从网站发布以来,我一直潜伏在这里,所以我相信你们中的一个(或多个)可以帮助我。以下是场景:

这是一个培训部门网站,该部门的课程目录存储在表
课程
中。每门课程可能有许多先决课程,例如,A和B是C的先决课程。我通常会将其作为逗号分隔列存储在
课程
中,或作为递归关系存储在单独的表
课程_prereq
课程_课程
中。这部分我可以做

但是,业务规则要求每门课程可以有多套先决条件。例如,
N
需要
A
B
C
,或者
N
需要
X
Y
。这就是我被困的地方

以前,我将此信息存储在行
N
的列中,作为
a,B,C | X,Y
,将id解析为PHP2D数组,提交第二个查询,查询id位于该数组中的所有行,然后使用PHP将这些行分为各自的组。完成所有这些处理后,先决条件组将在网页上显示为单独的表,如下所示:

| A | A的信息放在这里|
|B | B的信息放在这里|
|C | C的信息放在这里|
-——————————————————————————————————————————————
|X的信息放在这里|
|Y | Y的信息在这里|


我如何使用ASP.NET实现这一点?

添加一个表来保存
必备设置。此表为集合中的每个课程保留集合ID和返回课程表的键。对于给定的集合ID,该表可能有多行,因此您的主键将是集合ID加上课程ID。然后在
course\u prereq
表中,将课程与不同的先决条件集合关联起来。可以假定存在
关系,因为任何
都是在集合中强制执行的。

有一个名为PrerequisiseSet的表,它将FKs定义为每个Prerequisite。然后有一个课程-先决条件集多对多表,FKs到课程和先决条件集。大多数情况下,课程要求集中只有一个条目,但如果有多个条目,则将是一个OR关系。

以上两个答案都非常有用。我最终只使用了一个数据库表,而不是建议使用的两个。该表包含一个
课程id
prereq\u id
设置id
,它们一起构成主键

在ASP.NET页面中,我使用一个中继器循环返回课程的先决条件集的sqldatasource存储过程,并在该中继器内使用一个gridview从第二个sqldatasource存储过程读取各个先决条件信息。像这样:

RepeaterSqlDataSource
(返回集合ID)
中继器

. . . <代码>GridViewSqlDataSource
(返回集合中每个预请求id的课程信息
GridView


希望这对其他研究类似场景的人有所帮助。

我喜欢数据库模型。现在,我如何让它显示在ASP.NET页面中,以便每个
prereq\u集都是自己的gridview?中继器可以对返回的行进行分组,还是需要为此构建自定义控件?您可以将gridview和sqldatasource放在repeater,但这意味着要向数据库发送多个请求。您可能需要使用自定义html构建一个repeater—您可以使用许多不同的方法来处理它(请参阅Joel Coehoorn回答的评论)