我对某事感到困惑。我了解 ORM 在做什么,也了解 EF 是什么。我很模糊的是我不想使用专门的构造来获取数据的部分。我想使用 SQL。如果我在 SQL 中创建一个复杂的查询、大量子查询等,我是否正确,如果我希望能够像处理属性一样处理数据,我必须创建一个特殊的自定义类,只为那个查询。
我正在考虑这样的场景。有人需要信息。它需要一个复杂的查询,从 5 个不同的表中返回 20 列。我需要创建一个包含这些列的类,然后编写查询。这个对吗?
我在看这个教程
using System;
using System.Collections.Generic;
namespace ContosoUniversity.Models
{
public class Student
{
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
}
如果这类似于 Moodle 或其他 LMS 或学生信息系统会怎样?它们变得复杂,并且需要来自多个表的大量连接和数据。
这会被重复吗,很多:
public virtual ICollection<Enrollment> Enrollments { get; set; }
public virtual ICollection<Schedule> Schedules{ get; set; }
public virtual ICollection<SubjectContext> SubjectContexts{ get; set; }
public virtual ICollection<Grade> Grades{ get; set; }
public virtual ICollection<Instructor> Instructors{ get; set; }
例如,考虑这个查询:
SELECT user.firstname, user.lastname, user.email, user.country, cc.name AS 'course category name', c.fullname, q.name, question.content AS 'Question', choice.content AS 'Question option', choicerank.rank AS 'Choice value'
FROM mdl_course_categories AS cc
INNER JOIN mdl_course AS c ON c.category = cc.id
INNER JOIN mdl_questionnaire AS q ON q.course = c.id
INNER JOIN mdl_questionnaire_question AS question ON question.survey_id = q.id
INNER JOIN mdl_questionnaire_quest_choice AS choice ON choice.question_id = question.id
INNER JOIN mdl_questionnaire_response_rank AS choicerank ON choicerank.choice_id = choice.id
JOIN mdl_context AS ctx ON c.id = ctx.instanceid
JOIN mdl_role_assignments AS ra ON ra.contextid = ctx.id
JOIN mdl_user AS user ON user.id = ra.userid
ORDER BY user.firstname
这需要自定义类吗?
如果我做的事情有.toList(String)
,那是否违背了使用框架的目的?