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