بدون دسته بندی

حرفه ای: بازیابی داده ها در Entity Framework


بررسی روش LINQ-to-Entities

واژه LINQ مخفف Language-Integrated Query می باشد. این روش با از زبان LINQ که در ویژوال استودیو ۲۰۰۸ مطرح شد می‌تواند به سادگی query هایی را به دیتابیس ارسال کرده و رکوردهای مورد نظر را در قالب entity برگرداند. می توان از روش های مختلف مربوط به نوشتن دستورات LINQ برای بازیابی داده ها استفاده نمود. مثال زیر یک query ساده به روش LINQ-to-Entities را نشان می‌دهد که باعث می‌شود یک Student خاص از درون جدول مورد نظر از دیتابیس خوانده بشود. کد زیر نوشتن این کد به روش LINQ Method را نشان می‌دهد.

[c-sharp]
//Querying with LINQ to Entities
using (var context = new SchoolDBEntities())
{
var query = context.Students
.where(s => s.StudentName == "Bill")
.FirstOrDefault();
}
[/c-sharp]

کد زیر نوشتن این دستور به روش LINQ Query را نشان می‌دهد.

[c-sharp]
using (var context = new SchoolDBEntities())
{
var query = from st in context.Students
where st.StudentName == "Bill"
select st;

var student = query.FirstOrDefault();
}
[/c-sharp]

همانطور که در مثال بالا می بینید در ابتدا یک 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 SQL
string sqlString = "SELECT VALUE st FROM SchoolDBEntities.Students " +
"AS st WHERE st.StudentName == 'Bill'";

var objctx = (ctx as IObjectContextAdapter).ObjectContext;

ObjectQuery student = objctx.CreateQuery(sqlString);
Student newStudent = student.First();

علاوه بر این، می‌ از کلاس‌های EntityConnection و EntityCommand برای اجرا کردن دستورات Entity SQL استفاده کنید. این موضوع در کد زیر نشان داده شده است.

[c-sharp]
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 dict = new Dictionary();
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);
}
}
}
[/c-sharp]
بررسی روش Native SQL

به سادگی می توان دستورات SQL را به صورت خام برای دیتابیس نوشت و سپس ایجاد نمود. کدی که در قسمت زیر مشاهده می کنید این موضوع را نشان می‌دهد.

[c-sharp]
using (var ctx = new SchoolDBEntities())
{
var studentName = ctx.Students.SqlQuery("Select studentid, studentname, standardId from Student where studentname=”Bill”").FirstOrDefault();
}
[/c-sharp]

در رابطه با این روش و مزایا و معایب مختلفی که دارد در قسمت های بعد به طور مفصل تری صحبت خواهیم نمود.

منبع: وب سایت پرووید



برنامه نویس
جهت کسب اعات بیشتر به انجمن برنامه نویس مراجعه نمایید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

20 + 5 =

همچنین ببینید
بستن
دکمه بازگشت به بالا