Asp.net mvc 3 在MVC 3-ContosUniversity中使用实体框架4更新相关数据

Asp.net mvc 3 在MVC 3-ContosUniversity中使用实体框架4更新相关数据,asp.net-mvc-3,entity-framework-4,Asp.net Mvc 3,Entity Framework 4,以康托索大学为例 如何在学生/详细信息页面中显示每个学生的所有讲师。我认为我需要通过以下实体来获取讲师的数据: 学生(注册) 注册(课程) 课程(讲师) 讲师(课程) 我曾尝试使用讲师选项卡中的示例,但当我必须与所有讲师一起准备实体时,我陷入了困境 我创建了一个视图模型: 使用制度 使用System.Collections.Generic 使用ContosoUniversity.模型 命名空间ContosoUniversity.ViewModels { { 提前感谢您的帮助。请尝试以下代码: v

以康托索大学为例 如何在学生/详细信息页面中显示每个学生的所有讲师。我认为我需要通过以下实体来获取讲师的数据:

学生(注册)

注册(课程)

课程(讲师)

讲师(课程)

我曾尝试使用讲师选项卡中的示例,但当我必须与所有讲师一起准备实体时,我陷入了困境

我创建了一个视图模型:

使用制度

使用System.Collections.Generic

使用ContosoUniversity.模型

命名空间ContosoUniversity.ViewModels

{

{

提前感谢您的帮助。

请尝试以下代码:

var std = db.Students
            .Include(s => s.Enrollments.Select(en=>en.Course))
            .Where(s => s.StudentId == id)
            .SingleOrDefault(); // or ToList() if you want fetch all students

if(std != null){

    // do your work, for example, accessing this properties:
    var a = std; // the student
    var b = std.Enrollments; // student's enrollments
    var c = std.Enrollments.First().Course; // test for access one of the enrollments's course
    var d = c.Instructors; // test for access course's instructors all

    // or project all instructors in a List:
    var instructors = new List<Instructor>();
    foreach (var enr in std.Enrollments) {
        foreach (var ins in enr.Course.Instructors) {
            if (!instructors.Contains(ins)) {
                instructors.Add(ins);
            }
         }
     } // now, the "instructors" contains all instructors associated with current user!

}else{
    // if is null, do something else
}
您将在stdquery上看到以下sql语句:

{SELECT 
[Project1].[PersonID] AS [PersonID], 
[Project1].[C1] AS [C1], 
[Project1].[LastName] AS [LastName], 
[Project1].[FirstName] AS [FirstName], 
[Project1].[EnrollmentDate] AS [EnrollmentDate], 
[Project1].[C2] AS [C2], 
[Project1].[EnrollmentID] AS [EnrollmentID], 
[Project1].[CourseID] AS [CourseID], 
[Project1].[PersonID1] AS [PersonID1], 
[Project1].[Grade] AS [Grade], 
[Project1].[CourseID1] AS [CourseID1], 
[Project1].[Title] AS [Title], 
[Project1].[Credits] AS [Credits], 
[Project1].[DepartmentID] AS [DepartmentID]
FROM ( SELECT 
    [Extent1].[PersonID] AS [PersonID], 
    [Extent1].[LastName] AS [LastName], 
    [Extent1].[FirstName] AS [FirstName], 
    [Extent1].[EnrollmentDate] AS [EnrollmentDate], 
    '0X0X' AS [C1], 
    [Join1].[EnrollmentID] AS [EnrollmentID], 
    [Join1].[CourseID1] AS [CourseID], 
    [Join1].[PersonID] AS [PersonID1], 
    [Join1].[Grade] AS [Grade], 
    [Join1].[CourseID2] AS [CourseID1], 
    [Join1].[Title] AS [Title], 
    [Join1].[Credits] AS [Credits], 
    [Join1].[DepartmentID] AS [DepartmentID], 
    CASE WHEN ([Join1].[EnrollmentID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2]
    FROM  [dbo].[People] AS [Extent1]
    LEFT OUTER JOIN  (SELECT [Extent2].[EnrollmentID] AS [EnrollmentID], [Extent2].[CourseID] AS [CourseID1], [Extent2].[PersonID] AS [PersonID], [Extent2].[Grade] AS [Grade], [Extent3].[CourseID] AS [CourseID2], [Extent3].[Title] AS [Title], [Extent3].[Credits] AS [Credits], [Extent3].[DepartmentID] AS [DepartmentID]
        FROM  [dbo].[Enrollments] AS [Extent2]
        INNER JOIN [dbo].[Courses] AS [Extent3] ON [Extent2].[CourseID] = [Extent3].[CourseID] ) AS [Join1] ON [Extent1].[PersonID] = [Join1].[PersonID]
    WHERE ([Extent1].[Discriminator] = 'Student') AND ([Extent1].[PersonID] = @p__linq__0)
)  AS [Project1]
ORDER BY [Project1].[PersonID] ASC, [Project1].[C2] ASC}

Javad,非常感谢-它起了作用。唯一的一点是我需要所有的讲师以及与课程的关系(作为实体?)因此,在视图中,我可以有一个包含学生课程和相应讲师的表格。见下文,我认为这将有助于在foreach循环中生成视图。提前感谢。课程|系|讲师1050-化学|工程| Fakhouri和Abercrombie,Kim 4022-微观经济学|经济学| Harui,Roger 4041-宏观经济学|经济学|哈瑞,罗杰对于一名学生或没有学生协会的学生?嗯,我的英语不好):那么你想为一名学生或db中的所有课程获取课程(及其依赖项),而不需要任何过滤器?此外,如果答案有用或对你有帮助,请投票:)谢谢亲爱的保罗
    {
        var viewModel = new StudentIndexData();
        viewModel.Students = ctxDB.ctxStudents
        .Include(i => i.Enrollments.Select(c => c.Course))
        .Where(i => i.StudentID == iStID);



        if (iStID != null)
        {
            ViewBag.StudentID = iStID;

            viewModel.Enrollments = viewModel.Students.Where(i => i.StudentID == iStID).Single().Enrollments;
        }

        HERE IS WHERE I GET STUCK I DO NOT KNOW HOW TO POPULATE THE INSTRUCTORS ENTITY. AND COURSES ALSO.

        return View(viewModel);
    }
var std = db.Students
            .Include(s => s.Enrollments.Select(en=>en.Course))
            .Where(s => s.StudentId == id)
            .SingleOrDefault(); // or ToList() if you want fetch all students

if(std != null){

    // do your work, for example, accessing this properties:
    var a = std; // the student
    var b = std.Enrollments; // student's enrollments
    var c = std.Enrollments.First().Course; // test for access one of the enrollments's course
    var d = c.Instructors; // test for access course's instructors all

    // or project all instructors in a List:
    var instructors = new List<Instructor>();
    foreach (var enr in std.Enrollments) {
        foreach (var ins in enr.Course.Instructors) {
            if (!instructors.Contains(ins)) {
                instructors.Add(ins);
            }
         }
     } // now, the "instructors" contains all instructors associated with current user!

}else{
    // if is null, do something else
}
var stdquery = db.Students
                 .Include(s => s.Enrollments.Select(en=>en.Course))
                 .Where(s => s.PersonID == id);
var std = stdquery.SingleOrDefault();
{SELECT 
[Project1].[PersonID] AS [PersonID], 
[Project1].[C1] AS [C1], 
[Project1].[LastName] AS [LastName], 
[Project1].[FirstName] AS [FirstName], 
[Project1].[EnrollmentDate] AS [EnrollmentDate], 
[Project1].[C2] AS [C2], 
[Project1].[EnrollmentID] AS [EnrollmentID], 
[Project1].[CourseID] AS [CourseID], 
[Project1].[PersonID1] AS [PersonID1], 
[Project1].[Grade] AS [Grade], 
[Project1].[CourseID1] AS [CourseID1], 
[Project1].[Title] AS [Title], 
[Project1].[Credits] AS [Credits], 
[Project1].[DepartmentID] AS [DepartmentID]
FROM ( SELECT 
    [Extent1].[PersonID] AS [PersonID], 
    [Extent1].[LastName] AS [LastName], 
    [Extent1].[FirstName] AS [FirstName], 
    [Extent1].[EnrollmentDate] AS [EnrollmentDate], 
    '0X0X' AS [C1], 
    [Join1].[EnrollmentID] AS [EnrollmentID], 
    [Join1].[CourseID1] AS [CourseID], 
    [Join1].[PersonID] AS [PersonID1], 
    [Join1].[Grade] AS [Grade], 
    [Join1].[CourseID2] AS [CourseID1], 
    [Join1].[Title] AS [Title], 
    [Join1].[Credits] AS [Credits], 
    [Join1].[DepartmentID] AS [DepartmentID], 
    CASE WHEN ([Join1].[EnrollmentID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2]
    FROM  [dbo].[People] AS [Extent1]
    LEFT OUTER JOIN  (SELECT [Extent2].[EnrollmentID] AS [EnrollmentID], [Extent2].[CourseID] AS [CourseID1], [Extent2].[PersonID] AS [PersonID], [Extent2].[Grade] AS [Grade], [Extent3].[CourseID] AS [CourseID2], [Extent3].[Title] AS [Title], [Extent3].[Credits] AS [Credits], [Extent3].[DepartmentID] AS [DepartmentID]
        FROM  [dbo].[Enrollments] AS [Extent2]
        INNER JOIN [dbo].[Courses] AS [Extent3] ON [Extent2].[CourseID] = [Extent3].[CourseID] ) AS [Join1] ON [Extent1].[PersonID] = [Join1].[PersonID]
    WHERE ([Extent1].[Discriminator] = 'Student') AND ([Extent1].[PersonID] = @p__linq__0)
)  AS [Project1]
ORDER BY [Project1].[PersonID] ASC, [Project1].[C2] ASC}