我遇到了这种复杂的情况 使用“模型优先”创建EF,这是我的EF实体:
-Course Lecturer many to many relationship- Course Lecturer ------------ ------------------- Column IS_PROFESOR is bool +ID +ID value that makes Lecturer: +NAME +FIRSTNAME true: Course Profesor ----------- +LASTNAME false: Course Asistent -LECTURERS +IS_PROFESOR ----------- ------------------- -COURSES -------------------
现在 -LECTURERS 和 -COURSES 是导航属性。 从数据库中的这个表我需要查询数据并将它们放在一些模型中,这样我就可以得到以下课程索引视图
--------------------------------------------------------------------------------- Course | Professor | Assistants | Actions --------------------------------------------------------------------------------- course 1 | course professor |assistant 1 | edit update delete | |assistant 2 | edit update delete --------------------------------------------------------------------------------- course 2 | course professor |assistant 1 | edit update delete --------------------------------------------------------------------------------- course 3 | course professor |assistant 1 | edit update delete | |assistant 2 | edit update delete | |assistant 3 | edit update delete ---------------------------------------------------------------------------------
正如您所看到的,我需要查询以这种方式填充一些新的视图模型,它可以从课程助理列表中区分课程教授。 模型将是(对吧?):
public class CourseView
{
public int CourseID { get; set; }
public string CourseName { get; set; }
public string ProfessorName { get; set; }
public List AssistantNames { get; set; } // Or it should be List of Assistants
}
我无法用我自己的技能想出这个问题的合理解决方案,任何帮助,参考或建议对我来说意味着很多,对于每一秒看这个都是如此。
答案 0 :(得分:1)
您可能想要重做EF实体。现在你说每个课程都有多个讲师,讲师要么是教授,要么是助手。但是你的课程索引视图似乎表明每门课程应该有一位教授和多位助手。您还表明讲师只能是教授或助理。我首先要确保一门课程的教授不能成为另一门课程的助手。如果是这种情况,那么我会为教授和助理创建一个单独的表(或实体)。让每门课程都有一位教授和多位助手。另一方面,如果教授可以成为助理,那么你需要从讲师那里删除教授的名称,并通过让每门课程都有一位教授和一份助理教师名单来建立与课程的关系。
但是,如果您想继续使用当前的设置,您应该可以使用类似的内容填充所需的视图
var courseViews = from c in db.Courses
select new CourseView()
{
CourseID = c.ID,
ProfessorName = (from l in c.Leturers
where l.Is_Professor
select l.Name).FirstOrDefault(),
AssistantNames = (from l in c.Leturers
where !l.Is_Professor
select l.Name).ToList()
};