در نوشته های پیشین تلاش کردیم تا رویکرد Code First را آموزش دهیم. در آن رویکرد نخست کلاس های موجودیت (Entity Class) درون برنامه شناسانده (تعریف) می شدند و سپس می توانستیم مدل را از روی این کلاس ها و رابطه های میان آنها بسازیم. در واقع Entity Framework نگاشت دادن (Mapping) میان کلاس های موجودیت و جدول های پایگاه داده و وارونه (عکس) این را انجام می دهد.

در نوشته  گفتیم که دو رویکرد در Entity Framework  هست که آنها Code First و Database First  هستند. در رویکرد Code First ساخت مدل با نوشتن کلاس های موجودیت و سپس نگاشت آنها به جدول پایگاه داده انجام می شود ولی در Database First پایگاه داده و جدول و رابطه های میان آنها هست و باید کدهای سی شارپ کلاس های موجودیت را از روی آنها بسازیم. در واقع Database First نگاشت میان جدول به کلاس موجودیت است.

ساخت رویکرد Model First

برای آموزش رویکرد Model First نیاز داریم تا یک برنامه کنسولی Dot Net بسازیم و سپس باید یک پایگاه داده محلی را به پروژه بی افزاییم. پیش از این در نوشته ایجاد LocalDB برای پروژه های Net Framework چگونگی ساخت پایگاه داده محلی را گفته بودیم. برای آموزش از اینجا یک مدل می سازیم که در آن دو جدول به نام Blog و  Post است که یک رابطه یک به چند هست به گونه ای هر بلاگ دارای چندین پست ولی هر پست برای یک بلاگ است.

1 – ساخت EDM

برای گام نخست باید یک آیتم تازه از گونه ADO.NER Entity Data Model را به پروژه بی افزاییم تا بتوانیم مدل را طراحی کنیم. شکل زیر پنجره ساخت آیتم ها و افزودن آنها به پروژه را نشان می دهد. در این پنجره از سمت راست باید Data  و سپس از سمت دیگر باید ADO.NET Entity Data Model را کلیک و در پایین یک نام را مشخص کنید.

در شکل بالا نام EDM برابر با BloggingContext  است و در واقع نامی که اکنون برای EDM  بر می گزینید سپس همان نام کلاس Context  خواهد بود. سپس روی Add  کلیک کنید تا پنجره شکل زیر نشان داده شود. چون می خواهیم Model First  را بسازیم پس از پنجره Entity Data Model Wizard باید گزینه Empty EF Designer Model را برگزینیم.

پس از کلیک روی Finish در پنحره باالا، چندین فایل در زیر پوشه اصلی به نام BloggingContext.edmx ساخته می شود. شکل زیر ساختار پروژه (در اینجا پروژه کنسولی) را پس از ساخت EDM  نشان می دهد و همانگونه که می بیند، دو فایل با پسوندهای Designer.cs و  edm.diahram در آن هستت.

در شکل بالا روی BloggingContext.edmx کلیک کنید تا در میان ویژوال استادیو، یک فایل باز شود که به آن Designer Surface گفته می شود و این همان فایلی است که در آن می خواهیم به گونه ویژوالی، مدل را بسازیم. شکل زیر نمایی از Designer Surface را نشان می دهد. 

Designer Surface جایی است که باید اشیا گرافیکی را برای ساخت  EDM بی افزاییم. برای این کار دو راه است، نخست آنکه از شکل بالا، در پایین، از بخش Toolbox هر کدام از اشیا مورد نیاز را به درون Designer Surface  بکشید (Drag and Drop). راه دیگر آن است که درون Designer Surface راست کلیک کرده و سپس از منو Add  شی مورد نیاز را در Designer بسازید. نخستین شی مورد نیاز برای طراحی هر مدلی، شی Entity است که در واقع یک کلاس موجودیت را به همراه ویژگی ها (Properties) و رابطه های (Associations یا Navigation Properties) آنها را نشان می دهد. در پنجره Designer راست کلیک کرده و سپس از Add->Entity  را کلیک کنید تا شکل زیر نشان داده شود.

گزینه های یک مدل در EDM Designer

در شکل بالا، چندین گزینه برای ساخت یک مدل است که باید آنها را مقدار دهی کنیم. در زیر هر کدام از بخش های این پنجره و معنی و کاربردشان را گفته ایم.

  • Entity Name: نام موجودیت را نشان می دهد. پس از افزودن موجودیت، یک شی گرافیکی و یک کلاس همنام با این گزینه ساخته خواهد شد که آن کلاس، همان کلاس موجودیت دلخواه ما است.
  • Entity Set: این گزینه نام ویژگی <DbSet<Entity درون کلاس موجودیت را نشان می دهد که به این موجودیت اشاره دارد. بنابراین این گزینه بر کلاس Context تاثیر دارد.
  • Property Name: همانگونه که هر جدول پایگاه داده در زمان ساخته شدن، باید دست کم دارای یک تک ستون باشد، پس این گزینه نام آن ویژگی کلاس موجودیت را نشان می دهد. مقدار پیش فرض آن Id  است ولی در شکل بالا، آن را BlogId  نوشته ام.
  • Create Key Property: اگر آن را تیک زده باشید، مقدار Property Name  برابر با کلید اصلی خواهد بود.
  • Property Type: گونه داده (Data Type) را مشخص می کند که در شکل بالا Int32  است.

افزودن ویژگی تازه به شی

شکل زیر شی موجودیت Blog را نشان می دهد که در آن تنها یک ویژگی به نام BlogId  هست و می خواهیم یک ویژگی دیگر به نام Name از گونه string را به موجودیت بی افزاییم. برای این& روی شکل زیر کلیک راست کرده و سپس از Add New->Scalar Property را کلیک کنید و سپس در فیلد، نام ویژگی که در اینجا Name است را وارد کنید.

ویرایش ویژگی های یک ویژگی موجوددیت

هر ویژگی موجودیت (کلاس موجودیت) در کنار نامش دارای یک سری از ویژگی های دیگر مانند سطح دسترسی، کلید اصلی بودن و گونه Data Type  است. شکل زیر پنجره ویژگی های، ویژگی تازه ساخته شده، Name را نشان می دهد. روی نام ویژگی در شی موجودیت کلیک کنید تا پنجره ویژگی نشان داده شود.

  • Entity Key: اگر true باشد، پس این ویژگی نیز بخشی از کلید اصلی خواهد بود.
  • Max Length: بیشینه اندازه ویژگی را نشان می دهد. در اینجا من آن را برای Name برابر با 50 تعیین می کنم.
  • Nullable: اگر true باشد، پس ویژگی یا بهتر است بگوییم که ستون جدول می تواند NULL باشد.
  • Type: گونه داده (Data Type) ویژگی را نشان می دهد.

ساخت رابطه ها

نخست برابر با دومین شکل زیر، یک موجودیت تازه به نام Post با ویژگی دلخواه بسازید، سپس راست کلیک کرده و از Add New -> Association را کلیک کنید تا پنجره زیر نشان داده شود. چون هر بلاگ می تواند چندین پست داشته باشد، پس باید یک کلید خارجی درون موجودیت Post به جدول Blog باشد، پس برابر با شکل زیر، سوی Many  در رابطه& در جدول (موجودیت) Post است و از سوی دیگر، بخش One در جدول Blog خواهد بود.

2 – ساخت مدل

دومین گام ساخت مدل است که باید نخست روی Designer راست کلیک کنید و سپس گزینه Generate Database from Model را کلیک کنید تا پنجره شکل زیر نشان داده شود. در آن باید  اتصال به پایگاه داده و نام رشته اتصال در فایل App.config  را مشخص کنید. چون ما LocalDB را به کار می بریم، پس این فایل به گونه پیش فرض مشخص شده است. همچنین در پایان پنجره، می توانید نام رشته اتصال را تغییر دهید.

شکل زیر واپسین گام در ساخت مدل را نشان می دهد که در آن می بینید که اسکریپت SQL هست که در برگیرنده دستورهای ساخت جدول شناسانده (تعریف) شده است. پس از پایان یافتن این گام، هم کلاس ها و هم جدول ها ساخته می شوند. بنابراین از این پس می توانید پرسو جوهای دلخواه را بر روی مدل انجام دهید.

پس از انجام گام بالا، تنها یک کار می ماند و آن اینکه باید فایل اسکریپت SQL ساخته شده ، پس از گام بالا (پس از پایان یافتن ساخت مدل) را انجام دهیم. شکل زیر نمونه ای فایل sql ساخته شده را نمایش می دهد که باید در گوشه سمت چپ بالا، دگمه Execute را انجام دهید، یا اینکه می توانید کلیدهای Ctrl + Shift + E را فشار دهید.

بهتر است بگوییم، انجام اسکریپت SQL ساخته شده در گام های پیشین، واپسین گامی است که می بایست انجام دهیم، زیرا همین اسکریپت است که ساختار پایگاه داده را در خود دارد و با انجام آن است که همه جدول ها و ستون ها ساخته می شوند. بنابراین از این پس، جدول ها در پایگاه داده هستند و شما می توانید از درون کدهای سی شارپ و بدست کلاس های موجودیت و ویژگی های آنها با جدول ها و ستون های پایگاه داده هم کنشی (تعامل) داشته باشید. توجه کنید که Entity Framework بازهم میانجی (واسطه ای) میان کدهای سی شارپ و پایگاه داده است.

بررسی فایل های ساخته شده

شکل زیر همه فایل های پس از ساخت مدل را نشان می دهد که فایل های تازه ای برای پروژه ساخته شده اند. فهرست زیر نام این فایل ها را برای این نوشته نشان می دهند. شکل سمت راستی نیز جدول های ساخته شده درون پایگاه داده را نشان می دهد که در ینجا در برگیرنده دو جدول Blog و Post  است.

  • BloggingContext.Context.cs که همان فایل کلاس Context است. برای فهم بهتر محتوای آن را بخوانید.
  • Blog.cs فایل کلاس موجودیت Blog
  • Post.cs فایل کلاس موجودیت Post