در این پست از وبسایت پرووید در رابطه با آموزش Query گرفتن در Entity Framework Core #3 صحبت خواهیم کرد. تکنولوژی Entity Framework Core نسل بعدی Entity Framework است که توسط مایکروسافت معرفی شده است.

در قسمت قبلی از این آموزش در رابطه با قابلیت Eager Loading در Entity Framework Core صحبت کردیم.

علاوه بر این ما می‌ توانیم نام یک Property را در قالب یک string به این متد Include بدهیم. این چیزی است که در 6 Entity Framework نیز قابل انجام بود. کد زیر این موضوع را نشان می دهد.

var context = new SchoolContext();

var studentWithGrade = context.Students
                        .Where(s => s.FirstName == "Bill")
                        .Include("Grade")
                        .FirstOrDefault();

استفاده از این روش توصیه نمی‌ شود چرا که اگر نام Property را در درون String اشتباه وارد کنید در زمان Run Time یک Exception ایجاد خواهد شد. همیشه سعی کنید که پارامتر ورودی متد Include یک Lambda Expression باشد تا اگر خطایی وجود دارد در زمان Compile Time ایجاد شود.

آموزش .NET Core برای برنامه نویسان ویندوز

از شما دعوت می کنیم که از بسته ی آموزش .NET Core برای برنامه نویسان ویندوز دیدن کنید.

علاوه بر این می توانید از متد Include پس از متد FromSql استفاده کنید. کد زیر این موضوع را نشان میدهد.

var context = new SchoolContext();

var studentWithGrade = context.Students
                        .FromSql("Select * from Students where FirstName ='Bill'")
                        .Include(s => s.Grade)
                        .FirstOrDefault();

نکته مهم اینکه نمی توان از این Extension Method پس از دستور DbSet.Find استفاده کرد. به عنوان مثال دستور context.Students.Find(1).Include() در. 2 Entity Framework Core مجاز نمی باشد.

بسته ی آموزش شروع به کار با Entity Framework Core

از شما دعوت می کنیم که از بسته ی آموزش شروع به کار با Entity Framework Core دیدن کنید.

این موضوع ممکن است در ورژن های بعدی Entity Framework Core پیاده سازی شود. در قسمت بعد در رابطه با انجام Multiple Include یا به عبارتی Include های چندگانه صحبت خواهیم کرد.

انجام Multiple Include در Entity Framework Core

دقت کنید که میتوانید با استفاده از متد Include چندین Navigation Property مختلف یک Entity یکسان را Load کنید. برای مثال کد زیر باعث Load شدن Navigation Property هایی با نام Grade و StudentCourses که مربوط به Student می‌باشند می‌ شود.

var context = new SchoolContext();

var studentWithGrade = context.Students.Where(s => s.FirstName == "Bill")
                        .Include(s => s.Grade)
                        .Include(s => s.StudentCourses)
                        .FirstOrDefault();

این کد به یک دستور SQL که در قسمت پایین آن را مشاهده می‌ کنید ترجمه خواهد شد.

SELECT TOP(1) [s].[StudentId], [s].[DoB], [s].[FirstName], [s].[GradeId], [s].[LastName], 
        [s].[MiddleName], [s.Grade].[GradeId], [s.Grade].[GradeName], [s.Grade].[Section]
FROM [Students] AS [s]
LEFT JOIN [Grades] AS [s.Grade] ON [s].[GradeId] = [s.Grade].[GradeId]
WHERE [s].[FirstName] = N'Bill'
ORDER BY [s].[StudentId]
Go

SELECT [s.StudentCourses].[StudentId], [s.StudentCourses].[CourseId]
FROM [StudentCourses] AS [s.StudentCourses]
INNER JOIN (
    SELECT DISTINCT [t].*
    FROM (
        SELECT TOP(1) [s0].[StudentId]
        FROM [Students] AS [s0]
        LEFT JOIN [Grades] AS [s.Grade0] ON [s0].[GradeId] = [s.Grade0].[GradeId]
        WHERE [s0].[FirstName] = N'Bill'
        ORDER BY [s0].[StudentId]
    ) AS [t]
) AS [t0] ON [s.StudentCourses].[StudentId] = [t0].[StudentId]
ORDER BY [t0].[StudentId]
Go

در قسمت بعدی از این آموزش در رابطه با دستور ThenInclude در Entity Framework Core صحبت کردیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *