بازیابی داده ها در Entity Framework

به سادگی می توانیم query های مورد نظرمان را ایجاد و برای اجرا شدنشان از Entity Framework کمک گرفته تا داده های متناظر از دیتابیس خوانده شوند و آن دو برگردانده شوند. در Entity Framework روش‌های مختلفی برای query زدن و سپس تبدیل کردن داده ها به objectهای مورد استفاده وجود دارند که در ادامه به بررسی آنها خواهیم پرداخت. سه که روش کلی برای query زدن به دیتابیس شامل LINQ-to-Entities و Entity SQL و Native SQL می باشد.بررسی روش LINQ-to-Entities واژه LINQ مخفف Language-Integrated Query می باشد. این روش با استفاده از زبان LINQ که در ویژوال استودیو ۲۰۰۸ مطرح شد می‌تواند به سادگی query هایی را به دیتابیس ارسال کرده و رکوردهای مورد نظر را در قالب entity برگرداند. می توان از روش های مختلف مربوط به نوشتن دستورات LINQ برای بازیابی داده ها استفاده نمود. مثال زیر یک query ساده به روش LINQ-to-Entities را نشان می‌دهد که باعث می‌شود یک Student خاص از درون جدول مورد نظر از دیتابیس خوانده بشود. کد زیر نوشتن این کد به روش LINQ Method را نشان می‌دهد.//Querying with LINQ to Entitiesusing (var context = new SchoolDBEntities()){var query = context.Students.where(s => s.StudentName == "Bill").FirstOrDefault<Student>();}کد زیر نوشتن این دستور به روش LINQ Query را نشان می‌دهد.using (var context = new SchoolDBEntities()){var query = from st in context.Studentswhere st.StudentName == "Bill"select st;var student = query.FirstOrDefault<Student>();}همانطور که در مثال بالا می بینید در ابتدا یک object از نوع کلاس context یعنی همان SchoolDBEntities ایجاد شده است. توصیه می شود که این object با استفاده از دستور using ایجاد بشود. تا زمانی که از scope خارج می شود به صورت خودکار dispose بشود. در این قسمت بیش از این در رابطه با LINQ-to-Entities صحبت نخواهیم نمود؛ اما در قسمت های بعدی به طور مفصل تری از آن صحبت خواهیم کرد.بررسی روش Entity SQLروش Entity SQL یک روش دیگر برای ایجاد کردن query می باشد. در استفاده از این روشObject Services مربوط به Entity Framework به صورت مستقیم مورد استفاده قرار می گیرد و به جای برگردانده شدن یک IQueryable یک ObjectQuery برگردانده می شود. به منظور انجام این کار نیز نیاز به یک ObjectContext دارید. کدی که در قسمت زیر مشاهده می کنید همان دستور بالا این بار با استفاده از روش Entity SQL را نشان می‌دهد.//Querying with Object Services and Entity SQLstring sqlString = "SELECT VALUE st FROM SchoolDBEntities.Students " +"AS st WHERE st.StudentName == 'Bill'";var objctx = (ctx as IObjectContextAdapter).ObjectContext;ObjectQuery<Student> student = objctx.CreateQuery<Student>(sqlString);Student newStudent = student.First<Student>();علاوه بر این، می‌توانید از کلاس‌های EntityConnection و EntityCommand برای اجرا کردن دستورات Entity SQL استفاده کنید. این موضوع در کد زیر نشان داده شده است.using (var con = new EntityConnection("name=SchoolDBEntities")){con.Open();EntityCommand cmd = con.CreateCommand();cmd.CommandText = "SELECT VALUE st FROM SchoolDBEntities.Students as st where st.StudentName='Bill'";Dictionary<int, string> dict = new Dictionary<int, string>();using (EntityDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.CloseConnection)){while (rdr.Read()){int a = rdr.GetInt32(0);var b = rdr.GetString(1);dict.Add(a, b);}}}بررسی روش Native SQLبه سادگی می توان دستورات SQL را به صورت خام برای دیتابیس نوشت و سپس ایجاد نمود. کدی که در قسمت زیر مشاهده می کنید این موضوع را نشان می‌دهد.using (var ctx = new SchoolDBEntities()){var studentName = ctx.Students.SqlQuery("Select studentid, studentname, standardId from Student where studentname='Bill'").FirstOrDefault<Student>();منبع: وبسایت پرووید