ابتدا کد بنویسید سپس سراغ پایگاه‌ داده بروید

همه چیز برعکس اتفاق می‌افتد

نقش ORMها در توسعه برنامه‌های Data-Centric یا همان برنامه‌های مبتنی بر داده، بر هیچ‌کس پوشیده نیست، تا آنجا که خیلی از شرکت‌های کوچک اقدام به توسعه یک ORM کرده‌اند. ORM در مدل چند لایه برای توسعه نرم‌افزارها نقش اصلی را ایفا می‌کند.
کد خبر: ۳۷۷۴۵۲

یکی از دلایل محبوب شدن ORMها را می‌توان تولید بخش عمده‌ای از کد برنامه، انجام آزمایش‌های واحد در کمترین زمان ممکن و... برشمرد. شرکت ماکروسافت هم به عنوان یک شرکت پیشرو در زمینه نرم‌افزار اقدام به توسعه چند ORM نموده که یکی از آنها EF یا Entity Framework است. EF اولین‌بار با سرویس پک یک ویژوال استودیو 2008منتشر شد. اوایل خیلی‌ها معتقد بودند که EF قصد دارد جایگزین LINQ To SQL شود، ولی با گذشت زمان و عدم‌توسعه L2S توسط مایکروسافت، خیلی‌ها معتقد شدند که EF به مرور به محبوب‌ترین ORM مایکروسافت تبدیل خواهد شد.

EF چگونه کار می‌کند؟

در تمامیORM ها، مدل‌ها نقش اصلی را ایفا می‌کنند. EF با ارائه فایل edmx و ارائه دو مدل Conceptual Model و Storage Model مدل‌های مفهومی را از مدل‌های اصلی دیتابیس جدا کرد. به این صورت که با طراحی یک مدل مفهومی، می‌توانید بخش یا قسمتی از آن را به مدل داده‌ای اصلی خود که همان پایگاه داده‌ شماست، تبدیل کنید، این کار توسط یک فایل توصیفی به نام edmx که در واقع یک تصویر از اسکیمای دیتابیس و مدل‌های مفهومی شما را ارائه می‌دهد، انجام می‌شود. مدل مفهومی که به‌صورت کد توسط EF تولید شده، به وسیله Attribute به مدل داده‌ای اصلی یا همان دیتابیس تبدیل می‌شود. تا اینجا تقریبا همان اتفاقی می‌افتد که سابق بر این L2S انجام می‌داد.

در نسخه چهارم که به همراه نسخه 4 چارچوب کاری دات نت عرضه شد، یک ویژگی جالب به EF اضافه شد و آن هم (POCO (Plain Old CLR Object است. این ویژگی کد تولید شده را که پیش از این EF تولید می‌کرد، مرتب می‌کند و یک کد تمیزتر و قابل فهم‌تر ارائه می‌دهد و دیگر نگاشتی به وسیله Attribute صورت نمی‌گیرد چراکه همان فایل edmx آنقدر کامل شده که برای نگاشت یک مدل مفهومی به مدل داده‌ای کافی است. POCO توانست خیلی از مشکلاتی را که L2S و نسخه‌های قبلی EF داشتند، کاهش دهد اما POCO پایان کار برای EF نبود و توسعه EF همچنان ادامه دارد چنانکه توسعه‌‌دهند‌گان آن با استفاده از همین ایده POCO یک ویژگی جدید به نام Code-First به EF اضافه کردند. تا پیش از این مدل‌ها از روی پایگاه ‌داده طراحی می‌شدند، اما با این ‌ویژگی دیگر الزامی به وجود دیتابیس و یک مدل نگاشته شده نیست. شما با استفاده از همان مدل مفهومی که حاصل تجزیه و تحلیل سیستم‌ است، می‌توانید پایگاه داده خود را طراحی کنید. بسیار خب، حال با یک مثال کار خود را شروع می‌کنیم. ابتدا آخرین نسخه CTP از EF را که تقریبا دو هفته پیش منتشر شده، دانلود و نصب کنید. می‌توانید آن را از لینک زیر دریافت کنید:

http:‌/‌‌/‌www.microsoft.com‌/‌downloads‌/‌en‌/‌details.aspx?FamilyID=35adb688-f8a7-4d28-86b1-b6235385389d

پس از نصب، در پــــوشه Program Files دنـــبال Microsoft ADO.NET Entity Framework Feature CTP5 بگردید و فایل EntityFramework را به پروژه خود و درون آن اضافه کنید.

حالا نوبت طراحی مدل مفهومی است. ابتدا کلاس یا کلاس‌ها‌ی مورد نظر که قرار است با یک جدول در پایگاه داده ارتباط داشته باشند را می‌نویسیم. مثلا یک کلاس که نشان‌دهنده دانشجو باشد:

public class Student

{

public int StdNo { get; set; }

public string Name { get; set; }

public string Family { get; set; }

}

قرار است یک جدول معادل این کلاس در پایگاه‌ داده ایجاد شود. برای این کار نیاز به کلاس دیگری داریم که به دیتابیس ما بگوید این کلاس معادل یک جدول در پایگاه داده‌ است. این کلاس باید از کلاس DbContext مشتق شود. این کلاس در واقع نشان دهنده یک پایگاه داده است و همانند مدل‌های قبلی این کلاس، کل عملیات درج، حذف، خواندن و ایجاد عبارات SQL را در خود دارد. مثلا در L2S برای کار با داده‌های یک جدول خاص، یک ویژگی از نوع Table به کلاس DataContext اضافه می‌کردیم که عملیات درج، حذف و … را مدیریت کند. در اینجا هم مثل همان مدل باید یک ویژگی در کلاس DbContext اضافه شود. این ویژگی باید از نوع DbSet یا رابط IDbSet باشد. کد کلاس DbContext به‌صورت زیر است:

public class DataContext: DbContext

{

public DbSet،Student» Students { get; set; }

}

حال باید این کلاس را تنظیم کنیم تا با پایگاه‌ داده ما کار کند. برای این کار یک خط کد کافی است:

DbDatabase. SetInitializer،DataContext»(new CreateDatabaseIfNotExists،DataContext»());

این خط کد می‌گوید اگر دیتابیسی که با ساختار کلاس DataContext‌ همخوانی داد وجود نداشت، آن را بساز. این کار را با استفاده از پارامتر‌های متد SetInitializer انجام می‌دهیم. یکی از این پارامتر‌ها CreateDatabaseIfNotExists است و همان طور که از نامش پیداست، اگر دیتابیس موجود نبود، آن را می‌سازد.

می‌بینید که خیلی ساده با استفاده از ویژگی Code-First در EF توانستیم دیتابیس مورد نظر را تولید کنیم، اما این تمام قدرت Code-First نیست. در مقاله‌های بعدی بیشتر در مورد این ویژگی توضیح خواهیم داد.

امیر بهاءالدین سبط‌الشیخ

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها