شماره تماس 09336863931 | 09178169907 پست الکترونیک provid.ir@gmail.com

استفاده از دستورات خام SQL در Entity Framework Core #2

استفاده از دستورات خام SQL در Entity Framework Core #2 را در این قسمت از وبسایت آموزش برنامه نویسی پرووید دانلود کنید.

استفاده از دستورات خام SQL در Entity Framework Core #2

یکی دیگر از تفاوت‌های بسیار مهم این دو متد این است که در متد SqlQuery باید از نام Property های درون شی Entity خود استفاده کنید اما در متد FromSql باید از نام فیلد های جداول بانک اطلاعاتی خود استفاده کنید.

به عبارتی اگر درون کلاس Entity شما یک Property به نام CustomerId وجود داشته باشد که مربوط به فیلدی با نام pckID در جدول Customer در بانک اطلاعاتی باشد در زمان استفاده از متد SqlQuery باید از نام Property یعنی CustomerId استفاده کنید و در زمان استفاده از متد FromSql باید از نام فیلد جدول بانک اطلاعاتی یعنی pckID استفاده کنید.

قابلیت های متعدد SqlQuery به زودی در Entity Framework Core پیاده‌سازی خواهند شد اما در حال حاضر اگر می خواهید از این قابلیت‌ها استفاده کنید توصیه می کنم از کلاس RelationalCommand استفاده کنید. البته این کلاس به احتمال زیاد در نسخه های بعدی Entity Framework Core از بین خواهد رفت. دقت کنید که هنوز هم می‌توانید از ADO.NET استفاده کنید و دستوراتی را با استفاده از Command و DataReader به سمت بانک اطلاعاتی ارسال کنید. علاوه بر این استفاده از دستور ExecuteCommand می‌تواند برای اجرای دستورات CRUD استفاده شود.

مزیت ها

یکی از دلایل محدودیت‌های متد FromSql نسبت به متد SqlQuery این است که متد FromSql می‌تواند در کنار دستورات LINQ استفاده شود.

var custs = from c in db.Database.SqlQuery("Select * from Customers Where Status = 1")
            where c.LastOrderDate < DateTime.Now
            select c;

البته باید بگوییم که می‌توانیم از دستورات LINQ در کنار متد SqlQuery نیز استفاده کنیم اما این موضوع بسیار غیر کارآمد است. برای مثال در کدی که در قسمت بالا قرار داده ایم ابتدا تمامی Customer هایی که Status آنها برابر یک است از بانک اطلاعاتی خوانده شده و بعد با استفاده از دستورات LINQ در درون حافظه فیلتر می‌شوند و به برنامه برگردانده میشوند.

نظر بدهید

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

CLOSE
CLOSE