我应该为ASP中的主/细节操作创建一个新的控制器:NET MVC?

问题描述:

在MVC5项目中,有几个主/从实体,如下图所示组/学生:我应该为ASP中的主/细节操作创建一个新的控制器:NET MVC?

public class Group 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    //Navigation Properties 
    public virtual ICollection<GroupStudent> GroupStudents { get; set; } 
} 

public class GroupStudent 
{ 
    [Key] 
    public int Id { get; set; } 

    //Foreign key for Group 
    public int GroupId { get; set; } 

    //Foreign key for Student 
    public int StudentId { get; set; } 

    //Navigation Properties 
    public virtual Group Group { get; set; } 

    public virtual Student Student { get; set; } 
} 

public class Student 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    //Navigation Properties 
    public virtual ICollection<GroupStudent> GroupStudents { get; set; } 
} 

我创建了两个新的控制器:组和学生与IND定义的列表,创建,详细信息和编辑方法在相关的控制器中查看。另一方面,我需要进行主/细节操作,即将学生分配给组。在此步骤中,由于以下情况,我不确定有关此问题的好方法:

我应该为这些主/细节操作创建新控制器(即GroupStudentController)吗?还是应该在StudentController或GroupController中创建必要的方法?关于这种主/细节操作的真正惯例是什么?

+0

@binay只是创建方法,并确保您的方法应该驻留在控制器上的权重最大的基础上, – Sherlock

+0

老实说,这完全是一个偏好问题 - 通常您应该保持路由和控制器的公平性为了一致性(例如,如果路由是/ group/xyz/addstudent,然后将其放在组控制器上)。 –

+0

@Sherlock你的意思是说没有必要创建一个额外的控制器,我应该在Student或Group Controller上创建我的方法(与其中一个最相关)?你能多解释一下吗? –

无需创建一个额外的控制器,只需创建在任何现有的控制器的方法,并根据业务需要所需的方法的选择控制器。例如:如果您有一种方法可以将学生分配给某个组,并且该操作将从学生列表页面完成,则在学生控制器中进行操作,如果您有一个将从组中弹出的页面列表来管理所选组的学生,然后在组控制器中进行。

使您的业务驱动器。

+0

非常感谢您的答复。在这个阶段,我有一个问题:** 1)**我有时会将Entiy Model从View传递到Controller,然后直接传递给Data层。 ** 2)**另一方面,有时我将ViewModel从View传递给Controller,然后在将Controller传递给数据层之前将它映射到Controller中的Entiy Model。那么,第二种方法是最好的方法吗?如果是这样,我用Automapper进行映射。有没有更好的方式将ViewModel传递给数据层?关于这个问题的最佳约定是什么? –

+0

如果您需要在视图中使用您的实体模型,您总是可以传递视图只需要的内容,不需要额外的数据,例如:您有一张名为Student的表格,并且您在视图中显示所有信息以编辑它,那么可以直接使用实体模型而不是视图模型。 将视图模型传递给控制器​​时,应先传递业务层以进行任何业务验证,然后应将其传递到数据访问层以进行持久性,然后再将其从控制器传递到业务,然后将其映射到if您正在使用数据传输对象 –

+0

感谢您的回复。但根据AntP的说法,在视图上使用实体模型似乎不是个好主意,因此有人可以使用它来操作数据操作。因此,在这种情况下,最好在视图中始终使用ViewModel,并在将其发送到数据层之前将其映射到Controller上的相关实体模型。你对此有何看法? –