مروری بر قابلیت‌های LINQ، فناوری مایکروسافت

وقتی کدنویسی ساده‌ می‌شود
LINQ در کنفراس PDC سال 2005 معرفی شد. این مخلوق جدید ماکروسافت سرواژه عبارت Language Integrated Query است، یعنی پرس‌وجوی یکپارچه شده با زبان، و «لینک» خوانده می‌شود.

 

بنیان لینک بر مبنای ویژگی‌های جدید اضافه شده به

LINQ دسترسی به داده‌ها را خیلی راحت کرد، این داده‌ها می‌توانند داده‌های ذخیره شده در حافظه مثل مجموعه و آرایه‌های تعریف شده در برنامه باشند، یا داده‌های درون یک دیتابیس و داده‌های XML، ولی امروز پس از گذشت 5 سال از معرفی لینک، می‌توان تقریبا آن را در همه‌جا استفاده کرده، به‌خاطر پرطرفدارشدن آن برای باقی زبان‌های برنامه‌نویسی نیز توسعه داده شده است.

اخیرا با انتشار نسخه 4 پلتفورم دات‌نت، می‌توانیم عبارات پرس‌وجوی لینک را بصورت موازی اجرا کنیم، در این مقاله قصد داریم یاد بگیریم که از لینک چگونه برای دسترسی به داده های درون دیتابیس استفاده کنیم، در حال حاضر لینک از دیتابیس SQL Server و SQL Server CE پشتیبانی می‌کند، ولی شرکت‌های دیگر شروع به توسعه لینک برای بقیه دیتابیس‌های دنیا کرده‌اند که معروفترین آنها dbLinq است.

بسیار خب حال بررسی کنیم که چگونه می‌توان با لینک به دیتاهایی درون دیتابیس دسترسی پیدا کنیم.

لینک بطور کلی یک مدل Attribute-Base است، شما با قرار دادن صفات می‌توانید با استفاده از کلاس DataContext به داده‌های خود دسترسی پیدا کنید، خب چگونه؟

ما در دیتابیس خوب جدولی به نام Student داریم که شامل فیلدهای Id ، Name و Age داریم و می‌خواهیم با لینک به دیتاهای درون دیتابیس دسترسی داشته باشیم.

یک راه ساده استفاده از ویزارد هست که برای شروع استفاده از آن توصیه نمی‌شود.

راه دوم طراحی کلاس مطابق با دیتابیس (بهمین دلیل لینک را به‌عنوانی یک OR/M می‌شناسند) و سپس با استفاده از کلاس DataContext به آنها دسترسی پیدا می‌کنیم. حال یک کلاس به نام Student در برنامه تعریف می‌کنیم و فیلدهای جدول Student را بصورت یکسری ویژگی برای کلاس Student تعریف می‌کنیم:

C# 3.0 و VB.NET 9.0 است.

class Student

{

public int Id { get; set; }

public string Name { get; set; }

public int Age { get; set; }

}

حال یک مدل داریم که داده‌هایی که از سمت دیتابیس می‌آید، قرار است در همچین مدلی قرار بگیرد، ولی این مدل به‌خودی‌خود کار خاصی انجام نمی‌دهد.

حال با استفاده از صفات می‌توان آن‌را به DataContext داد تا دیتاها را بر مبنای آن بیاورد.

دو صفت خاصی که بیشتر مورد استفاده قرار می‌گیرد ColumnAttribute و TableAttribute است، TableAttribute مشخص می‌کند که کلاس ما با کدام جدول دیتابیس در ارتباط است و نحوه استفاده از آن به‌صورت زیر است:

 

[Table(Name=»«tableName»»)]

مقدار Name اسم جدول درون دیتابیس را مشخص می‌کند. اگر نام کلاس مطابق با نام جدول درون دیتابیس باشد دیگر نیازی به مشخص کردن Name نیست، برای مثال ما دیگر نیازی به مشخص کردن Name نیست. برای وصل کردن ویژگی‌ها به فیلدهای درون یک جدول از ColumnAttribute استفاده می‌کنیم، که معرفی آن بصورت زیر است:

 

[Column(Name=»«FieldName»»,DbType=»«FieldDataType»»,IsPrimaryKey=«ForPrimaryKey»)]

برای صفت Column نیز مثل Table است مقدار Name برابر نام فیلد است و همان قواعد Name که برای Table است برای Column نیز صادق است ، مقدار DbType نوع فیلد ذخیره شده در دیتابیس را مشخص می‌کند و مقدار IsPrimaryKey نیز نشان می‌دهد، این فیلد کلید اصلی است یا خیر، برای یکی از ویژگی‌های کلاس بالا صفت Attribute را تنظیم می‌کنیم که نتیجه بصورت زیر است:

 

[Column(DbType=»integer»,IsPrimaryKey=true)]

public int Id { get; set; }

این نشان می‌دهد که ویژگی Id منطبق با فیلد Id در دیتابیس است و در دیتابیس از نوع عدد صحیح است و همچنین کلید اصلی هم هست.

بسیارخب، حال کلاس Student ما نشان دهنده جدول Student در دیتابیس است، حالا بررسی می‌کنیم که چگونه دیتاها را باید از دیتابیس خواند:

برای اینکار از کلاس DataContext استفاده می‌کنیم، این کلاس یک متد بصورت Generic دارد که داده‌ها را از دیتابیسی که رشته ارتباطی آن به کلاس DataContext داده شده است می‌آورد.

این متد بصورت زیر است:

Table«T» students = (new DataContext()).GetTable«T»();

مقدار students برای مثال ما از نوع Table«Student» است، و کلاس Table در سطوح بالای خود رابط IEnumerable«T» را پیاده کرده است. پس با یک حلقه ساده می‌توان به رکوردهای جدول Student دسترسی پیدا کرد:

 

DataContext db= new DataContext(«connectionString»);

Table«Student» students = db.GetTable«Student»();

foreach (Student student in students)

{

//do-task

}

مقدار student برابر یک رکورد ذخیره شده در دیتابیس است که منطبق بر جدول Student است.

همانطور که دیدید به‌راحتی با استفاده از LINQ به داده‌های درون دیتابیس دسترسی پیدا کردیم، ولی آیا قدرت لینک همین است؟

/ 0 نظر / 15 بازدید