در بخش قبل گفتم که چند روش برای انجام کوئری بر EDM وجود دارد. اما قبل از وارد شدن به مبحث کوئری ; لازم دانستم مفاهیمی دیگر را نیز بیان کنم .
شاید این پرسش برای خیلی ها مطرح شود که چرا برای نوشتن کوئری باید از چند روش استفاده کرد و کلا چرا این روشها معرفی شده است و تفاوت بین این روشها چیست ؟
من ترجیح دادم قبل از وارد شدن به مبحث کوئری کمی در مورد ساختار و نحوه انجام کوئریها صحبت کنم .
با توجه به پیشینه زبان لازم دانستم مفاهیمی دیگر را نیز بیان کنم .
شاید این پرسش برای خیلی ها مطرح شود که چرا برای نوشتن کوئری باید از چند روش استفاده کرد و کلا چرا این روشها معرفی شده است و تفاوت بین این روشها چیست ؟
من ترجیح دادم قبل از وارد شدن به مبحث کوئری کمی در مورد ساختار و نحوه انجام کوئریها صحبت کنم .
با توجه به پیشینه زبان LINQ برای مایرکروسافت ; می توان نتیجه گرفت که هدف اصلی از ارایه LINQ TO Entities در واقع توسعه ای برای این زبان است و امکانی برای برنامه نویسانی است که با این زبان سر و کار دارند.علاوه بر این استفاده از LINQ مقادیر برگشتی کوئری بصورت جدولها و ردیف و ستون نیست .بلکه بصورت object است .محدودیت زبان LINQ در این است که فقط در زبانهای سی شارپ و vb.net پشتیبانی می شود و برای سایر زبانهای دات نت قابل استفاده نیست . علاوه بر این به هنگام کامپایل باید به زبان متدی Query method تبدیل شود تا برای CLR قابل فهم باشد .
زبان Entity SQL : این زبان بسیار شبیه به زبان T_SQL است . با این تفاوت که این زبان می تواند با کلاسها و اشیا سروکار داشته باشد و به تبع آن از وراثت و ارتباطات بین کلاسها به خوبی پشتیبانی می کند. . در واقع ما به کمک Entity SQL می توانیم همه به صورت شی گرا و هم بصورت داده ها رکوردی سطر و ستون ; با بانک اطلاعاتی سروکار داشته باشیم .و این مهمترین دلیل برتری Entity Sql بر زبان LINQ to Entity است .
در نهایت زبان Query Method لایه ای پایینتر است ، چرا که فقط می تواند با با زبانهای بالا ترکیب شود و کویریهای بسیار قدرتمندتری را تولید کند . از مهمترین خصوصیت این روش خلاصه نویسی و استفاده از عبارتهای لامبدا است . .
اکنون به شکل زیر دقت کنید تا متوجه شوید که وLINQ to Entities Entity Sql چگونه با داده ها تعامل می کنند
همانطور که در شکل بالا می بینید . اگر بخواهیم با داده ها بصورت شی یا object سر و کار داشته باشیم . با استفاده از زبان LINQ to Entities و Entity SQL ما می توانیم با شی object service در تعامل باشیم . در این تعامل ما کاملا با کلاسها از جمله کلاس objectcontext و کلاسها داده data class سر و کار داریم .
حال اگر به شکل بالا دقت کنید می بینید که LINQ to Entites برای انجام کویری چه فرایندی را طی می کند . علاوه بر این نمی تواند مستقیما به لایه EntityClientLINQ to Entites دسترسی داشته باشد در حالی که Entity SQL می تواند مستقیما با لایه EntityClient دسترسی داشته باشید و داده ها را بصورت رکوردی و ستون و ردیف داشته باشد
EntityClient چیست ؟ همانطور که در شکل بالا و در شکل پایین می بینید ، این لایه بسیار شبیه به لایه های Sqlclient ,OracleClient ,…. است. این لایه مدیریت رشته اتصال و command ها و غیره را کنترل و پردازش می کند .سرو کار کوئری در این لایه با داده ها بصورت شی و Object نیست بلکه بصورت داده های ستونی و ردیفی است ، علاوه بر این این لایه با EDM در ارتباط مستقیم است .
امیدوارم توانسته باشم فرق و ساختار کویریها را به خوبی بیان کنم
ادامه دارد ......
Querying with the Entity Framework
قبل از آنکه در مورد کویری با مدل بحث کنیم بد نیست بدانیم که کویری های ما با کلاس مدل سروکار دارند لذا نیم نگاهی به کلاس سازنده مدل می اندازیم.
اگر کلاس مدل را باز کنید متوجه دو بخش عمده Context , entity می شوید . در واقع کلاس اصلی سازنده مدل ما از کلاس objectcontext ارث بری می کند .در شکل زیر نموداری کلی از کلاس را نشان می دهد .
به طور خلاصه می توان گفت که هر کلاس مدل دارای ساختار مشابه شکل فوق است . ما وقتی مدل خود را ایجاد می کنیم ، کلاس تشکیل شده بصورت عمده دارای دو object است . 1- شی object context و 2- شی Entity Type
ما در اجرای کویری عمدتا با این دو شی سر و کار خواهیم داشت .
Object Context : اصلی ترین و مهمترین کلاسی که ما از آن استفاده می کنیم ، با ایجاد مشتقی از این کلاس ما کلاسی خواهیم داشت که رشته اتصال به بانک اطلاعاتی و سازنده های کلاس و حالت کلاس برای انجام اعمال تغییر و حذف و ثبت استفاده می شود .
Entity Type : قسمت مهم دیگر است که از کلاس Entityobject مشتق می شوند .از مهمترین کارهایی که این کلاس برای ما ارایه می دهد تعریف عناصر موجودیت و خصوصیتهای آنها و ارتباطات بین عناصر موجودیت و ...
اکنون که بطور خلاصه با دو کلاس آشنا شدیم ، چگونه می توانیم کویری برای مدل ایجاد کنیم ، کلا برای نوشتن کویری بر یک مدل ما سه نوع روش کویری داریم .
1-LINQ to Entities : در این روش ما از دستورات زبان LINQ استفاده می کنیم .
2-Entity Sql : یک زبانی که با اشیا سرو کار دارد و به شما امکان می دهد که کویری خود را ب روی اشیا بدون نیاز به زبان Tsql انجام دهید .
3-Querying with Method : متدهایی از شی objectquery هستند که به شما اجازه می دهند با ترکیبی از عبارتهای لامبدا Lambdas کویری خود را بنویسید .
ادامه دارد ....
در بخش بعدی در مورد هر کدام از موارد بالا مفصلتر خواهم نوشت .
QUERYING THE EDM
در بخشهای قبلی جزییات نحوه ایجاد یک مدل و ساختار آن را توضیح دادم ، اکنون نوبت به نوشتن دستورات است و چگونه با داده های بوسیله مدلها در تعامل باشیم ، بازیابی اطلاعات و حذف و تغییر چگونه خواهد بود . ما تا قبل از آمدن مفاهیم ORM ها و غیره برای انجام کویری برروی داده ها مستقیما با بانکهای اطلاعاتی سرو کار داشتیم در واقع با دستورات T-SQL سرو کار داشتیم . اما از اینجا به بعد با دستورات LINQ to Entities و Entity Sql سروکار خواهیم داشت .این دستورات با EDM سروکار دارند . اما لازم دانستم قبل از وارد شدن به این مبحث ابتدا در مورد Logical Query Processing در sql server کمی صحبت کنم . حتما تا حالا با انواع و اقسام دستورات پرس و جو با بانکهای اطلاعاتی سرو کار داشته اید ، آیا تا حالا از خود پرسیده اید که فرایند و تسلسل این دستورات چگونه است ، کلا در یک عبارت پرس و جو از چند جدول بانک اطلاعاتی ابتدا کدام دستور اجرا می شود .
ما می دانیم که هر عبارت پرس و جو دارای عناصر زیر است .
From ,select,where,on , join,group by , having ,order by,top , است . ترتیب اجرای آنها در یک عبارت جستجو بصورت زیر است .
1. FROM
2. ON
3. OUTER
4. WHERE
5. GROUP BY
6. CUBE | ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10 ORDER BY
11. TOP
1-عبارت from در واقع اول از همه اجرا می شود به این دلیل که ابتدا باید جدوال منبع جستجوی ما مشخص شوند
2-عبارت on ,outer ,…. در واقع عبارتهای الحاقی ، همان عبارتهایی که بعد از مشخص شدن جدولهای مورد نظر ، حالا باید مشخص شود که ترکیب این جدولهای چگونه است .
3-از میان ترکیب چند جدول حالا بر اساس عبارت where مجموعه ای از داده ها انتخاب می شوند
4-در ادامه از میان این داده های انتخاب شده ، داده ها بر اساس فیلدهایی گروه بندی می شوند.
5-وباز در ادامه از میان گروهها ممکن است مجموعه ای از عناصر بر اساس دستور having فیلتر شوند
6-select اینجا با این دستور در واقع داده ها برای نمایش و نتیجه برگزیده می شوند .
7-از میان داده ها برگزیده شده ممکن است سورت خاصی مد نظر شما باشد که با استفاده از order by عمل سورت برای شما انجام می شود
دیدن فایل پی دی اف زیر را برای فهم بهتر مطالب ، توصیه می شود .
ادامه دارد....