2017-01-05 21 views
0

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

私はこのようなシナリオを考えています。誰かが情報を必要とします。 5つの異なる表から20列を戻す複雑な照会が必要です。これらの列を持つクラスを作成してからクエリを作成する必要があります。これは正しいです?

私は、これはMoodleのか、他のLMSや学生情報システムのようなものは何だった場合

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-application

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; } 
    } 
} 

、このチュートリアルで探していますか?複雑になり、いくつかのテーブルより多くの結合とデータが必要になります。

が、これは、多くの重複することになります。たとえば

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)を持っているものをやっているのであれば、フレームワークを使い始める目的を破るのでしょうか?

+0

Raw SQLまたはLINQクエリでは、クエリ結果を表すクラスが必要です。 –

+0

だから私は理解しています。お願いします。私は、おそらく、SQL自体に加えて、多くの部品を構築する必要がありますか?言い換えれば、私はORMから恩恵を受けるかどうかを調べるために、どれだけ多くのクエリを調べ、複雑さなどを判断する必要があります。 – johnny

答えて

1

この場合、ORMはどのようなメリットをもたらしますか?本物の質問。私は1つ考えることができません。

QueryFirstを使用してください。最適な条件(SQLウィンドウ)でSQLを編集し、を作成するためにはがありません。

免責事項:私はQueryFirstを書いています。

+0

私は分かりません。私はEFもクラスを生成したと思った。 – johnny

+0

EFは_schemaオブジェクトのクラスを生成します_。彼らがしたくない "カスタムSQL"を書くと、結果を受け取るクラスを作成して管理することになります。行が並ばない場合は実行時エラーになります。 – bbsimonbb

関連する問題