مقایسه کارایی NHibernate با Entity Framework

مقایسه سطوح
store
read over relations
read by ID
update
delete

Operation \ Number of operations NHiberante – 4K Entity Framework – 4K NHiberante – 40K Entity Framework- 40K Winner
Store 37,37 9,19 1500 98 Entity Framework
Read over relations 1,01 0,54 10,13 4,18 Entity Framework
Read by ID 3,06 25,22 246 230 NHibernate with smaller amount of objects
Update 6,61 7,34 77 72 Both
Delete 3,35 16,76 58 1824 NHibernate


دوستان عزیز با توجه به جدول بالا NHibernate با توجه به سرعتی که در خواندن دیتا دارد
پر اهمیت تر است یا Entity Framework که در خواندن relation ها سریعتر است ؟
از دید یکی از دوستان Read by ID در زدن query های پیچیده پر اهمیت تر است و سرعت ذخیره و به روز رسانی دیتا ها نسبت به آن از اهمیت کمتری برخوردار است .

مقایسه بین Linq to SQL و Entity Framework

شاید برای شما هم این سوال مطرح شده باشد که Linq To Sql و Entity Framework چه تفاوتهایی دارند ، در این تایپیک این دو مورد را از جنبه های مختلفی مقایسه خواهم کرد .
1-complexity یا پیچیدگی : البته منظور از پیچیدگی از نگاه سخت و آسان بودن نیست بلکه از نگاه امکاناتی که در اختیار شما قرار می دهد . مسلما LINQ امکانات و پیچیدگیهای کمتری دارد.

شاید برای شما هم این سوال مطرح شده باشد که Linq To Sql و Entity Framework چه تفاوتهایی دارند ، در این تایپیک این دو مورد را از جنبه های مختلفی مقایسه خواهم کرد .
1-complexity یا پیچیدگی : البته منظور از پیچیدگی از نگاه سخت و آسان بودن نیست بلکه از نگاه امکاناتی که در اختیار شما قرار می دهد . مسلما LINQ امکانات و پیچیدگیهای کمتری دارد.
2-model یا مدل سازی : ما در Entity Framework براحتی می توانیم مدل سازی کنیم علاوه بر آن از تمام ارتباطات بین جدولها پشتیبانی می کند LINQ از یک ارتباط یک به یک بین کلاسها و جدولهای بانک اطلاعاتی پشتیبانی می کند .
3-پشتیبانی از بانک اطلاعاتی : LINQ to SQL فقط از بانک اطلاعاتی Sql_Server پشتیبانی می کند در حالی که Entity Framework می تواند از بانکهای اطلاعاتی مختلفی پشتیبانی کند .
4-زمان توسعه پذیری :To SQL LINQ می تواند به راحتی استفاده شود و به سرعت کار شما را پیش ببرد . اما در نرم افزارهای پیچیده و بزرگ بدلیل داشتن امکانات محدود و کم دیگر جوابگو نیست .
5-وراثت : Entity Framework از وراثت بین کلاسها براحتی استفاده و پشتیبانی می کند در حالی که این خاصیت در LINQ وجود ندارد .
6-نوع فایل : LINQ در فایلی با پسوند DBML ذخیره می شوند در حالی که Entity Framework در فایلهای EDMX و CSDL ,SSDL که با فرمت xml است ذخیره می شوند .
7-نوع مرکب : ما در Entity Framework می توانیم فیلدی مرکب complex type تعریف کنیم . این فیلد چیزی شبیه به ساختار ها است . اما این امکان درTo SQL LINQ وجود ندارد
8-کویری : همانطور که در آموزشهای خودم نوشتم . Entity Framework از چندین سبک برای اجرای کویری استفاده می کند . Linq to Entity , EntitySQL , Query With Method
9-کارایی : هر دو از نظر سرعت در اولین اجرا شاید بتوان گفت کند هستند . اما Eitity Framework از نظر کارایی بهتر عمل می کند .
10-توسعه آینده : مایکروسافت چندان علاقه ای به توسعه و ادامه راه LINQ to SQL ندارد اما در عوض بیشتر تمرکز و توسعه را بر مبنای تکنولوژیهای دیگری گذاشته است از جمله Entity Framework
11-ساخت بانک اطلاعاتی از مدل : ما فقط در Entity Framework می توانیم ابتدا مدل خودمان را طراحی کنیم و سپس با استفاده از آن مدل ، بانک اطلاعاتی را تولید کنیم.4

Linq To Sql
با هدف تولید سریع نرم افزارهای مرتبط با SQL Server بوجود آمد.
مزایا:1. Lazy Loading of Data2. تولید کلاسها و متدها بصورت partial که امکان ایجاد Business Logic دلخواه و وارثت را برای برنامه نویس فراهم می کند3. امکان بهینه سازی اجرا بوسیله Compiled Query و Stored Procedure4. map many-to-many relationships با استفاده از کلاس میانی

مزایا:1. مستقل از دیتابیس : بدلیل وجود فراهم کنندگان EF برای دیتابیسهای مختلف از قبیل Oracle ، MySQL ، DB2و... نیازی به نوشتن کوئری های متفاوت بر اساس دیتابیس نمی باشد و تنها با کوئری های LINQ می توان با با انواع منابع دیتا ارتباط برقرار کرد.2. پشتیبانی از POCO (Plain Old CLR Objects)3. پشتیانی از Model-First : ایجاد مدل قبل از ایجاد دیتابیس4. Lazy Loading of Related Objects5. پشتیبانی از نامگذاری Plurality6. پشتیبانی از Complex Type7. map many-to-many relationships بدون نیاز به کلاس میانی و بصورت مستقیم (مپ کردن یک کلاس به چند جدول)8. نمایش لایه مفهومی با استفاده از EDM9. قابلیت اشتراک یک مدل از میان Replication, Reporting Services, BI, Integration Services و...


منابعی که به شما کمک میکنند بهتر تصمیم بگیرید:
Update on LINQ to SQL and LINQ to Entities Roadmap
http://blogs.msdn.com/b/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx

Microsoft kills Linq to SQL
http://ayende.com/Blog/archive/2008/10/31/microsoft-kills-linq-to-sql.aspx