شاید برای شما هم این سوال مطرح شده باشد که 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 می توانیم ابتدا مدل خودمان را طراحی کنیم و سپس با استفاده از آن مدل ، بانک اطلاعاتی را تولید کنیم.
باید قسمت زیر رو به زمان توسعه پذیری اضافه کنید:
در صورتی که EF هم استفاده آسان را فراهم می کند و هم امکاناتی فراهم می کند که در نرم افزارهای تجاری و پیچیده احساس کمبود نکنید.
و همچنین در LINQ to SQL هم می توان نوعی از وراثت را استفاده کرد :
http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/10/01/linq-to-sql-inheritance.aspx
سلام
من از شما بابت قرار دادن این مطلب بسیار متشکرم. لطف کردید.
من چند سوال داشتم:
اول اینکه آیا با استفاده از Entity Framework و یا LinqtoSQL مشکل Sql Injection حل می شود و یا باز نیاز به استفاده از راههایی مانند Store procedure ها داریم و اگر حل می شود چه کارهایی را برای ایجاد امنیت در EF باید انجام دهیم؟
و سوال دیگر اینکه باتوجه به اینکه با بزرگ شدن دیتابیس سرعت عمل در Entity Framework پایین می آید در صورتی که بر فرض خود شما بخواهید یک نرم افزار بنویسید که قرار است داده های تجاری یک شرکت را ذخیره کند و کاهش سرعت در کیفیت نرم افزار تاثیر خواهد گذاشت آیا باز از EF استفاده می کنید و یا از روشهای سطح پایین تر مانند Ado.net استفاده می کنید؟
با تشکر
سلام دوست عزیز بابت تاخیر من شرمنده شما هستم
اما عدم تایید نظر شما دلیل بر چیز خاصی نیست بلکه می خواستم جوابی مستدل برای جواب شما پیدا کنم .
ان شا الله در اولین فرصت جواب خواهم داد