Asp.net NET和一对多对多方案
我不熟悉ASP.NET,但不熟悉编程。我正在将我们当前的站点从PHP/MySQL迁移到ASP.NET(3.5)/SqlServer。自从网站发布以来,我一直潜伏在这里,所以我相信你们中的一个(或多个)可以帮助我。以下是场景: 这是一个培训部门网站,该部门的课程目录存储在表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或课程_课程中。这部分我可以做 但是,业务规则要求每门课程可以有多套先决条件。
课程中。每门课程可能有许多先决课程,例如,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回答的评论)