در بخش قبل گفتم که چند روش برای انجام کوئری بر 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 در ارتباط مستقیم است .
امیدوارم توانسته باشم فرق و ساختار کویریها را به خوبی بیان کنم ادامه دارد ...... |