مقایسه کارآیی ORMهای مطرح دات نت
Entity framework code-first
برای تکمیل بحث نیاز است تغییرات انجام شده از نگارش 4 به 6 را نیز مد نظر داشته باشید:
- ارتقاء به Entity framework 6 و استفاده از بانکهای اطلاعاتی غیر از SQL Server
- بروز رسانی استفاده از SqlServer Compact در Entityframework 6.0
آشنایی با مباحث Migrations
- آشنایی با Code first migrations : قسمت اول و دوم
- وادار کردن EF Code first به ساخت بانک اطلاعاتی پیش از شروع به کار برنامه
- بررسی خطاهای متداول عملیات Migration در حین به روز رسانی پروژههای EF Code First
- بازسازی جدول MigrationHistory با کد نویسی در EF Code first
- استفاده از چندین Context در EF 6 Code first
آشنایی با تنظیمات نگاشتها به دو روش استفاده از ویژگیها و Fluent API
- امکانات مهیا جهت تنظیم ویژگیهای مدلهای برنامه در EF Code first
- تعیین شمای جداول بانکی در EF Code First
- بررسی تعاریف نگاشتها به کمک متادیتا در EF Code first
- بررسی Fluent API جهت تعریف نگاشت کلاسها به بانک اطلاعاتی
- مدیریت روابط بین جداول در EF Code first به کمک Fluent API
- ادامه بحث بررسی جزئیات نحوه نگاشت کلاسها به جداول، توسط EF Code firs
- SQL Server CE و ثبت متون طولانی در EF Code first
- بازنویسی سادهتر پیش فرضهای EF Code first در نگارش 6 آن
- مباحث تکمیلی مدلهای خود ارجاع دهنده در EF Code first
- بررسی تفصیلی رابطه Many-to-Many در EF Code first
- تقسیم جدول در Entity Framework Code First
- کار با کلیدهای اصلی و خارجی در EF Code first
- تنظیمات ارث بری کلاسها در EF Code first
- ایندکس منحصر به فرد با استفاده از Data Annotation در EF Code First
- ایجاد ایندکس منحصربفرد در EF Code first به صورت Fluent API
- افزودن خودکار کلاسهای تنظیمات نگاشتها در EF Code first
- خودکار کردن تعاریف DbSetها در EF Code first
- بررسی خطای cycles or multiple cascade paths و یا cyclical reference در EF Code first
- بالا بردن سرعت بارگذاری اولیه EF Code first با تعداد مدلهای زیاد
اعتبارسنجی و بررسی استثناءها
- Entity Framework و InnerException
- استثناهایی که باید حین استفاده از EF Code first بررسی شوند
- اعتبارسنجی در Entity framework Code first
ردیابی تغییرات
- ردیابی تغییرات در EF Code first
- ردیابی تغییرات در Entity Framework، بخش اول
- چند نکته کاربردی درباره Entity Framework
- نمایش خروجی SQL کدهای Entity framework 6 در کنسول دیباگ ویژوال استودیو
- بالا بردن سرعت DbContext هنگام ثبت دادههای زیاد
- استفاده از EF در اپلیکیشنهای N-Tier : قسمت اول
- نحوه کاهش مصرف حافظه EF Code first حین گزارشگیری از اطلاعات
استفاده از SQL خام و بانکهای اطلاعاتی متفاوت
نکات مهم کوئری نویسی در EF
- نوشتن پرس و جو در Entity Framework با استفاده از LINQ To Entity ، قسمت اول، دوم و سوم
- تفاوت بین IQueryable و IEnumerable در حین کار با ORMs
- Lazy loading و eager loading
- روشهایی برای بهبود سرعت برنامههای مبتنی بر Entity framework
- نکاتی در مورد استفاده از توابع تجمعی در Entity framework
- کوئریهایی با قابلیت استفادهی مجدد
- شبیه سازی outer Join در entity framework
- اعمال توابع تجمعی بر روی چند ستون در Entity framework
- متد LastOrDefault در EF
- Func یا Expression Func در EF
- درج یک باره چندین رکورد بصورت همزمان هنگام استفاده از ORMها
- استفاده از خواص راهبری در Entity framework بجای Join نویسی
- مرتب سازی رکوردها به صورت اتفاقی در Entity framework
- استفاده از خواص راهبری در EF Code first جهت ساده سازی کوئریها
- یافتن مقادیر نال در Entity framework
- واکشی اطلاعات به صورت chunk chunk (تکه تکه) و نمایش در ListView
- امنیت در LINQ to SQL
- کارهایی جهت بالابردن کارآیی - قسمت اول
- کارهایی جهت بالابردن کارآیی - قسمت دوم
- کارهایی جهت بالابردن کارآیی - قسمت سوم
استفاده از EF در WPF
لایه بندی پروژههای EF Code first
- پیشنیاز: مطالعه کامل دوره تزریق وابستگیها
- استفاده از الگوی Repository اضافی در EF Code first؛ آری یا خیر؟!
- Repositoryها روی UnitOfWork ایده خوبی نیستند
- پیاده سازی الگوی Context Per Request در برنامههای مبتنی بر EF Code first
- پیاده سازی UnitOfWork به وسیله MEF
پروژههای انجام شده با EF Code first
CleanArchitecture-Template
در این مخزن روشهای بهینه و توصیه شده جهت ساخت برنامههای تحت وب با استفاده از Net Core. در قالب 12 پروژه پیاده سازی شده است که منبع خوبی جهت الگو برداری است.
Boilerplate for ASP.NET Core reference application with Entity Framework Core, demonstrating a layered application architecture with DDD best practices. Implements NLayer Hexagonal architecture (Core, Application, Infrastructure and Presentation Layers) and Domain Driven Design (Entities, Repositories, Domain/Application Services, DTO's...) and aimed to be a Clean Architecture, with applying SOLID principles in order to use for a project template. Also implements best practices like loosely-coupled, dependency-inverted architecture and using design patterns such as Dependency Injection, logging, validation, exception handling, localization and so on.
EF Code First #1
برای مسایل شخصی نیاز به بررسی کدهای شما، بررسی best practices، بررسیهای ویژه توسط EF Profilers و همچنین code review هست. به عبارتی نیاز به مشاور خصوصی دارید.
موفق باشید
سایت Tekpub محصولات آموزشی خودش رو به مدت فقط 24 ساعت به صورت رایگان در دسترس علاقمندان قرار داده. شامل دورههای کامل ASP.NET MVC ، Entity framework و غیره. بشتابید!
قبل از استفاده از بلاگر، در سایت wordpress وبلاگ داشتم، که بهدلایلی کنسل شد. تفاوت محسوسی را که اینجا مشاهده میکنم، نبود قسمت آمار سایت است. در سایت wordpress آمار مبسوطی را از بازدید کنندگان سایت میتوانید در کنترل پنل مدیریتی وبلاگ مشاهده کنید، اما در اینجا خیر.
به همین جهت اولین کاری را که انجام دادم استفاده از سرویس رایگان persianstat بود که انصافا هم با کیفیت است و قابل مقایسه با آماری که wordpress ارائه میدهد، میباشد.
جالب اینجا است که هر چند هاست اینجا، گوگل است اما استفادهی خودکار از ابزار Google analytics در آن مهیا نیست. احتمالا علت آن آماده نبودن API آن است که قرار است به زودی ارائه شود، بنابراین ارزش وقت گذاشتن را دارد.
برای استفاده از Google analytics ، پس از ثبت نام و ورود به آن، سایت مورد نظر را معرفی کرده (در قسمت Add Website Profile) و نهایتا یک کد جاوا اسکریپتی به شما خواهد داد که میتوانید آنرا به صفحات مورد نظر خود در سایت اضافه نمائید تا تحت کنترل آماری قرار گیرد. محدودیتی هم در مورد تعداد سایت وجود ندارد و با یک اکانت میتوانید چندین سایت را معرفی کرده و تحت کنترل قرار دهید.
اگر از ASP.Net استفاده میکنید، تنها کافی است به master page سایت مراجعه کنید و پیش از بسته شدن تگ body ، اسکریپت مربوط به Google analytics را اضافه کنید تا تمام سایت را تحت کنترل قرار دهید.
یا اگر علاقمند بودید که اینکار را به صورت "شیکتری" انجام دهید، میتوان از این http module استفاده کرد. به این صورت ابتدا تگ بسته شدن body به صورت خودکار پیدا شده و سپس اسکریپت به پیش از آن اضافه میشود.
این روش بار بزرگ تهیه آمار سایت را حذف خواهد کرد. عموما دیتابیس جمع آوری آمار سایت خیلی زود (برای مثال پس از گذشت 6 ماه) حجیم میشود و تاثیر مشهودی را بر روی کارآیی سایت خواهد گذاشت. بنابراین، این سؤال مطرح میشود که چرا گوگل اینکار را برای ما انجام ندهد؟! هزینه بانک اس کیوال سرور بر روی هاستهای اینترنتی بالا بوده و حجمی را هم که در اختیار قرار میدهند محدود است. در صورت نیاز به حجمهای بالاتر باید هزینه بیشتری را پرداخت کرد. بنابراین هم از لحاظ قیمت و هچنین کارآیی سایت، استفاده از این سرویس واقعا مقرون به صرفه است. بعلاوه از تنوع آماری که ارائه میدهد نیز نمیتوان چشم پوشی کرد. برای مثال کاربران چه واژههای کلیدی را در موتورهای جستجو وارد کردهاند تا به سایت شما رسیدهاند؟ چند درصد کاربر وفادار دارید؟! (کاربرهای وفادار، منظور افرادی هستند که به صورت منظم به سایت سر میزنند) و امثال این. انصافا تهیه چنین ماژولی برای یک سایت از لحاظ برنامه نویسی شاید با برنامه نویسی کل یک سایت برابری کند.
اگر هم نیاز به یک برنامه سورس باز داشتید که هر روز به اکانت Google analytics شما سر بزند و اطلاعات آنرا استخراج کرده و در یک بانک SQL server ذخیره کند، میتوانید به پروژه سی شارپ زیر مراجعه نمائید:
Google Analytics Data Extractor
البته باید دقت داشت که پس از ارائه API کامل Google analytics ، دیگر نیازی به این نوع روشهای ابتکاری وجود نداشته و استخراج داده از آن بسیار سادهتر خواهد شد.
بد نیست لیست تعدادی از بانکهای اطلاعاتی مهم قابل استفاده در دات نت به همراه درایورهای ADO.NET آنها را با هم مرور نمائیم.
بانکهای اطلاعاتی قابل استفاده در دات نت فریم ورک | ||||||
ردیف | بانک اطلاعاتی | سایت مرجع | درایور ADO.NET | امکان استفاده از LINQ | مجوز استفاده | توضیحات |
1 | SQL Server 2000/2005/2008/2008 R2 | + | توکار (به صورت پیش فرض در دات نت فریم ورک موجود است) | بلی . به کمک LINQ to SQL ، Entity Framework ، NHibernate و بسیاری از ORM های دیگر | رایگان - تجاری | نسخههای Express آن رایگان است. |
2 | Microsoft SQL Azure | + | بلی : + | بلی. به کمک LINQ to SQL و Entity Framework | تجاری | |
3 | SQL Server Compact | + | بلی : + | بلی. به کمک LINQ to SQL و Entity Framework | رایگان | |
4 | Advantage Database Server | + | قابل دریافت از سایت اصلی: + | بلی. به کمک Entity framework و Telerik OpenAccess ORM | تجاری | |
5 | SQL Anywhere | + | قابل دریافت از سایت اصلی: + | بلی. به کمک Entity framework و Telerik OpenAccess ORM | رایگان - تجاری | Web Edition آن رایگان است. |
6 | MySQL | + | قابل دریافت از سایت اصلی : + | بلی . به کمک NHibernate ، LightSpeed ، DbLinq و تعدادی دیگر از ORM's | رایگان - تجاری | |
7 | Oracle | + | پشتیبانی توکار آن به زودی حذف خواهد شد اما از سایت اصلی قابل دریافت است : + | بلی . به کمک NHibernate ، LightSpeed ، DbLinq و تعدادی دیگر از ORM's | رایگان - تجاری | نسخهی Express آن رایگان است. |
8 | Access | + | توکار | بلی. به کمک ALinq ، NHibernate و یا LINQ to DataSets | تجاری | اگر از دات نت فریم ورک سه و نیم، سرویس پک یک استفاده کنید، امکان استفاده از LINQ to SQL جهت کار با بانکهای اطلاعاتی اکسس نیز مهیا است: + |
9 | SQLite | + | مهیا به صورت سورس باز : + | بلی. درایور ADO.NET آن پشتیبانی از Entity Framework را نیز اضافه میکند. همچنین NHibernate ، ALinq و سایر ORM's را باید به این لیست اضافه کرد. | رایگان | |
10 | Firebird | + | قابل دریافت از سایت اصلی: + | بلی. توسط ALinq ، NHibernate و موارد دیگر. | رایگان | |
11 | PostgreSQL | + | قابل دریافت از سایت اصلی: + | بلی. توسط NHibernate ، DBLinq و موارد دیگر | رایگان | |
12 | DB2 UDB | + | قابل دریافت از سایت اصلی: + | بلی. توسط NHibernate | تجاری | |
13 | ScimoreDB | + | قابل دریافت از سایت اصلی: + | محدود. توسط LINQ to DataSets | رایگان | |
14 | MongoDB | + | معرفی شده در سایت اصلی : + | بلی. درایور ADO.NET معرفی شده به همراه پروایدر LINQ نیز میباشد. | رایگان | |
15 | CouchDB | + | معرفی شده در سایت اصلی : + | محدود | رایگان | |
16 | VistaDB | + | اساسا برای دات نت نوشته شده است. | بلی. به کمک Entity framework | تجاری |