0

私は何か混乱しています。ORM が何をしているのか、EF とは何かを理解しています。私が漠然としているのは、特殊な構造を使用してデータを取得したくない部分です。SQLを使いたい。SQL で複雑なクエリや多数のサブクエリなどを作成する場合、データをプロパティのように処理できるようにするには、そのクエリのためだけに特別なカスタム クラスを作成する必要があります。

こんなシチュエーションを考えています。誰かが情報を必要としています。5 つの異なるテーブルから 20 列を返す複雑なクエリが必要です。これらの列を持つクラスを作成してから、クエリを作成する必要があります。これは正しいです?

私はこのチュートリアルを見ています、

https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net- mvc-アプリケーション

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)をすると、そもそもフレームワークを使用する目的に反することになりますか?

4

1 に答える 1

1

この状況で ORM はどのようなメリットをもたらしますか? 本物の質問。思いつきません。

QueryFirstを使用します。最適な条件 (SQL ウィンドウ) で SQL を編集すれば、作成するものは他にありません

免責事項: 私は QueryFirst を書きました。

于 2017-01-06T08:40:30.917 に答える