کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش اجرای SQL Query در Entity Framework Core

آموزش اجرای SQL Query در Entity Framework Core

آموزش اجرای SQL Query در Entity Framework Core

Entity Framework Core متدDbSet.FromSql()را برای اجرای query های خالص SQL در Database هدف و گرفتن پاسخ به صورت entity object ها، در اختیار می گذارد. مثال زیر نحوه ی اجرا یک SQL Query روی MS SQL Server را نشان می دهد:


var context = new SchoolContext();
var students = context.Students
                  .FromSql("Select * from Students where Name = 'Bill'")
                  .ToList();

در مثال بالا متدFromSql() پس از DbSet< Student > استفاده شده پس دستور بالا رکوردهایی از جدول Students برمی گرداند که در نهایت به موحودیت Student تبدیل می شود. کوئری های پارامتری (Parameterized Query)

متد FromSql می تواند query های پارامتری دریافت کند:


string name = "Bill";
var context = new SchoolContext();
var students = context.Students
                    .FromSql($"Select * from Students where Name = '{name}'")
                    .ToList();

مثال زیر نیز درست است:

string name = "Bill";
var context = new SchoolContext();
var students = context.Students
                    .FromSql("Select * from Students where Name = '{0}'", name)
                    .ToList();

مثال بالا query زیر را در Database SQL Server اجرا می کند:


exec sp_executesql N'Select * from Students where Name = ''@p0''
',N'@p0 nvarchar(4000)',@p0=N'Bill'
go

LINQ Operators

می توانید پس از متد FromSql، از LINQ Operators ها نیز استفاده کنید:


string name = "Bill";
var context = new SchoolContext();
var students = context.Students
                    .FromSql("Select * from Students where Name = '{0}'", name)
                    .OrderBy(s => s.StudentId)
                    .ToList();

در مثال بالا، EF Core هر دو بخش را ترکیب و دستور زیر را در Database اجرا می کند:


exec sp_executesql N'SELECT [s].[StudentId], [s].[Name]
FROM (
    Select * from Students where Name = ''@p0''
) AS [s]
ORDER BY [s].[StudentId]',N'@p0 nvarchar(4000)',@p0=N'Bill'
go

محدودیت های FromSql


  • Query ها باید موجودیت هایی هم نوع با DbSet برگردانند. مثلا اگر متد FromSql پس از Students نوشته شده، query نمی تواند Course برگرداند. این قابلیت ممکن است در نسخه های آتی اضافه شود.
  • SQL query باید همه ی ستون های جدول را بگرداند. مثلا دستور context.Students.FromSql("Select StudentId, LastName from Students).ToList() خطا می دهد.
  • The SQL نمی تواند حاوی join query برای گرفتن Dataی وابسته باشد. از متد Include برای load Dataی وابسته پس از متد FromSql() استفاده کنید.
1398/06/28 4549 614
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...