عملکرد بهتر با Dapper

ساخت وبلاگ

<strong>عملکرد</strong> <strong>بهتر</strong> با Dapper

در این مقاله میخواهیم راجب عملکرد بهتر با Dapper صجبت کنیم. شکی نیست که Entity Framework با LINQ عالی است . اما Entity Framework با صرف هزینه ای همراه است.

همانطور که متیو جونز در وبلاگ خود اشاره می کند ، استفاده از LINQ + Entity Framework زمان بیشتری را برای هر بازیابی داده در مقایسه با استفاده از SqlDataAdapter ADO.NET صرف میکند.

هزینه اندک است (در هر جایی از یک سوم از میلی ثانیه تا ۱۰۰ میلی ثانیه) (anywhere from a third of a millisecond to 100 milliseconds) اما صفر نیست.

عملکرد بهتر با Dapper

اگر سرعت برای شما مهم است اما شما نمی خواهید از دسترسی به داده های object-oriented صرف نظر کنید ، می توانید از Dapper استفاده کنید.

همانند Entity Framework ، Dapper یک Mapper Relationation Object است که به شما امکان می دهد نمایش داده ها را به یک پایگاه داده انتقال دهید و object را برگردانید.

آنچه که در مورد Dapper ، در مقایسه با Entity Framework ، جذاب است این است که زمان پاسخگویی آن معادل استفاده از ADO.NET است. اول ، بگذارید اصول اولیه Dapper را به شما نشان دهم.

Dapper چیست؟

Dapper خود را “micro-ORM” توصیف می کند زیرا عملکرد بسیار کمتری را نسبت به Entity Framework ارائه می دهد.

در حالیکه هنوز هم به عنوان یک ORM حساب می شود ، زیرا Dapper به شما امکان می دهد entity objects را از relational tables (جداول رابطه ای) بازیابی کنید.

Dapper به عنوان بخشی از عملکردهای ORM “کوچک سازی اندازه” به جای اینکه شما را در ایجاد context object مانند Entity Framework یاری کند ، به عنوان مجموعه ای از روشهای توسعه (extension methods) برای ADO.NET’s Connection classes کار می کند.

علاوه بر این ، Dapper فقط از پرس و جو و به روزرسانی از طریق SQL پشتیبانی می کند ، (configuring classes) کلاس های پیکربندی را برای مطابقت با جداول database پشتیبانی می کند ، و از توسعه اولین کد پشتیبانی نمی کند.

با توجه این نکته ، افزونه های سوم در کتابخانه Dapper وجود دارد که به عنوان مثال از به روزرسانی های object-oriented و نقشه برداری از کلاس به جدول (class-to-table mapping) پشتیبانی می کند.

اگر Dapper به اندازه کافی محبوبیت خود را نشان دهد، باید انتظار داشت که هزینه ‌های کتابخانه‌ی بیشتری ظاهر شوند.

قابل تصور است که روزی بسیاری از قابلیت های Entity Framework’ می‌توانند از طریق Dapper در دسترس باشند.

زیبایی معماری Dapper این است که ، مانند کتابخانه های جاوا اسکریپت ، شما فقط می‌توانید کتابخانه / کارایی مورد نیاز خود را اضافه کنید.

نکته منفی اینکه شما مجبور خواهید بود یک جعبه ابزار Dapper از میان افزونه‌های Dapper انتخاب و جمع کنید و این واقعیت وجود دارد که به محض اضافه کردن قابلیت های کافی ، از عملکرد کمی کند Dapper در مقایسه با EF چشم پوشی خواهد کرد.

استفاده از Dapper نیاز به نوشتن کد بیشتری نسبت به EF + LINQ دارد. در حالی که شما با نوشتن کد کمتر نسبت به ADO.NET عملکردی مشابه آن دریافت خواهید کرد.

کار با Dapper

ساده ترین روش برای استفاده از Dapper ارسال دستور SQL یا نام دستورالعمل ذخیره شده به روش افزونه‌ی Query Dapper است.

متد Query خود را به هر کلاس که رابط اتصال IDB را پیاده سازی کند متصل می کند، بنابراین پایگاه داده “agnostic ” است و باید با هر یک از انواع اتصال ADO.NET کار کند. همچنین Query یک متد عمومی است:

شما باید نوع (کلاس) entity را مشخص کرده که نتیجه بازگشته نقشه ستون های آن را نیز در بر داشته باشد.

در این مثال از روش Query برای بازیابی سطرها از جدول Employees و ایجاد مجموعه ای از اشیاء Employee استفاده می شود:

Dim emps As List(Of Employee)
Using con = New SqlConnection(strConnection) emps = con.Query(Of Employee)("Select * from Employee") For Each emp As EmployeeBases In emps MessageBox.Show(emp.Name) Next
End Using

همچنین می توانید لیستی از Objects (هنگام کار با SQL را در اوپراتور) ، مجموعه دیکشنری پارامترهای دینامیکی Dapper ( هنگام استفاده مجدد از پارامترها) یا ( Dapper’s DbString objec ) که به شما امکان کنترل بیشتری بر روی مقادیر String را می دهدمنتقل کنید.
اگر می خواهید چندین دستور SQL را به طور همزمان ارسال کنید ، می توانید از روش Dapper QueryMultiple استفاده کنید.

اگر فقط به اولین موردی که توسط Query برگردانده شده علاقه دارید ، می توانید از روش QueryFirst برای بازیابی یکQueryFirst استفاده کنید:

emps = con.Query(Of Employee)("Select * from Employees Where Name Like ' percent'+ @Name", New With {.Name = "Vogel"})

همچنین می توانید لیستی از object  ، مجموعه دیکشنری پارامترهای دینامیکی Dapper یا شی Dapper’s DbString (که به شما امکان کنترل بیشتری بر روی مقادیر String را می دهد) منتقل کنید.

اگر می خواهید چندین دستور SQL را به طور همزمان ارسال کنید ، می توانید از روش Dapper QueryMultiple استفاده کنید.

اگر فقط به اولین موردی که توسط Query برگردانده شده علاقه دارید ، می توانید از روش QueryFirst برای بازیابی یک single object استفاده کنید:

Dim emp As Employee
emp = con.QueryFirst(Of Employee)("Select * from Employees Where Id = @Id, New With {.Id = 431})

Dapper همچنین QuerySingle ، QueryFirstOrDefault و QuerySingle Or Default را برای بازیابی یک شی واحد فراهم می کند.

برای ثبت بروز رسانی SQL، قرار دادن و یا حذف دستور (Statement)، Dapper از روش Execute استفاده می کند.

معادل واقعی برای خصوصیات ناوبری EF وجود ندارد، بنابراین ، اگر می خواهید داده ها را از جداول چندگانه بازیابی کنید ، باید دستور SQL Join را بنویسید.

با ارائه یک عبارت lambda به روش Query می توانید نتایج یک دستور الحاق (Join) را به کلاس‌های چندگانه ترسیم کنید، که نشان می‌دهد کدام ستون ها باید با کدام objectsاستفاده شوند و کدام ستون سطرهایی را که به همان شیء “parent” تعلق دارند. (به طور معمول ، هر ستونی برای پیوستن به جداول استفاده می شود).

هشدارها

چند نکته برای هشدار دادن هست، به هنگام خواندن مقایسه بین ADO.NET و Entity Framework، به یاد داشته باشید که این دو فناوری کارهای متفاوتی انجام می دهند.

به عنوان مثال ADO.NET به شما اشیاء (Objects) نمی دهد (یا در بهترین حالت ممکن فقط یک شیء ساختگی مانند DataTable به شما می دهد).

EF هنگام پیوستن به جداول ، هنگام ایجاد اشیاء هنگام کار با داده های مکرر که ADO.NET انجام نمی دهد ، کارهای هوشمندانه ای انجام می دهد.

بسیاری از مقایسه های عملکرد Dapper به EF همچنین از کد بسیار وانیلی یعنی EF + LINQ استفاده می کنند.

اگر می خواهید بر روی زمان سرمایه گذاری کنید، می توانید با استفاده از AsNoTracking و نوشتن عبارات پیچیده تر LINQ و lambda نسبت به نمونه های Dapper-to-EF + LINQ عملکرد EF را بهبود ببخشید.

اما باید اعتراف کنیم، فکر می کنیم نوشتن کد پیچیده تر برای عملکرد بهتر EF، این نکته را از قلم می‌اندازد که:

شما EF به خاطر عملکرد آن استفاده می کنید، برای عملکردی که حداقل “به اندازه کافی خوب” باشد (که همه شما می خواهید).

هنگامی که شما نیاز به فشار آخرین اونس از سرعت دسترسی به پایگاه داده خود دارید، بهتر است به جای اینکه درEF آزار و اذیت ببینید، هوشمندانه ترین کار این است که دست به دامن ابزاری که بر عملکرد متمرکز باشد نه کارایی، شوید و این می تواند Dapper باشد.

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

برچسب : نویسنده : دانلودی source بازدید : 561 تاريخ : سه شنبه 29 بهمن 1398 ساعت: 2:41