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