0
在我的應用程序中,我試圖編寫一個ListStudents ActionResult,它只顯示一個列表,其中的ClassroomID等於當前登錄的教師創建的ClassroomID之一。ASP.NET MVC 4,EF和LINQ:爲多對多關係創建特定的LINQ查詢
我相信我需要使用一些LINQ查詢來獲得所需的結果,但是我被卡住了,因爲當教師實體擁有教室ICollection時,我不知道如何處理它。
ListStudents & CreateClassroom我TeacherController
public ActionResult ListStudents()
{
//This gets the current teachers UserProfile as only users with the teacher role have access to this controller
var teacherProfile = db.UserProfiles.Local.SingleOrDefault(u => u.UserName == User.Identity.Name)
?? db.UserProfiles.SingleOrDefault(u => u.UserName == User.Identity.Name);
var teacher = db.Teachers.Find(teacherProfile.UserId);
//Need query where students ClassroomID needs to be one of the current teachers ClassroomID's
return View(students);
}
public ActionResult CreateClassroom(Classroom model)
{
if (ModelState.IsValid)
{
try
{
var userProfile = db.UserProfiles.Local.SingleOrDefault(u => u.UserName == User.Identity.Name)
?? db.UserProfiles.SingleOrDefault(u => u.UserName == User.Identity.Name);
var classroom = new Classroom
{
ClassroomName = model.ClassroomName,
TeacherID = userProfile.UserId
};
db.Classrooms.Add(classroom);
db.SaveChanges();
}
catch (DataException)
{
ModelState.AddModelError("", "Something went wrong, try again.");
}
}
return RedirectToAction("ListClassrooms");
}
模式對於用戶,學生,教師和課堂
public class User
{
[Key]
[Editable(false)]
[ForeignKey("UserProfile")]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
public int UserId { get; set; }
public virtual UserProfile UserProfile { get; set; }
[Display(Name = "First Name")]
[Required(ErrorMessage = "First name is required.")]
[MaxLength(50)]
public virtual string FirstName { get; set; }
[Display(Name = "Last Name")]
[Required(ErrorMessage = "Last name is required.")]
[MaxLength(50)]
public virtual string LastName { get; set; }
}
學生
public class Student : User
{
[ForeignKey("Account")]
[Editable(false)]
public virtual int AccountID { get; set; }
public virtual Account Account { get; set; }
[Column("ClassroomID")]
[ForeignKey("Classroom")]
public virtual int ClassroomID { get; set; }
public virtual Classroom Classroom { get; set; }
}
教師
public class Teacher : User
{
public virtual ICollection<Classroom> Classrooms { get; set; }
}
課堂
public class Classroom
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public virtual int ClassroomID { get; set; }
[Display(Name = "Classroom Name")]
[MaxLength(50)]
public virtual string ClassroomName { get; set; }
public virtual ICollection<Student> Students { get; set; }
[Column("TeacherID")]
[ForeignKey("Teacher")]
public virtual int TeacherID { get; set; }
public virtual Teacher Teacher { get; set; }
}
感謝您抽出時間來幫我解決這個問題,我是很新的MVC和我試圖儘可能多的學習,因爲我能夠。
非常感謝你,完美的工作!我在理解第一個查詢正在做什麼時遇到了一些麻煩。如果你不介意的話,你能否告訴我它正在做什麼? –
您需要查詢的第一件事是教室的集合。一旦你有了這些教室,你就可以看到學生屬於那些教室。在第一個查詢中,我使用WHERE子句獲得了一批教室。從那個集合中,我只關心Ids(這是SELECT子句的作用)。教室變量實際上只是一個整數集合。 – mtm927
非常感謝! –