دوره آموزش جامع انتیتی فریم ورک Entity Framework آشنایی با DataAnnotation ها

گروه نرم افزاری هیلتن
گروه نرم افزاری هیلتن
در قسمت قبلی ما درباره روش Code First صحبت کردیم و به توضیح نحوه کد زنی و استایل کدهای DataModel مون پرداختیم و یاد گرفتید که اگ ...
در قسمت قبلی ما درباره روش Code First صحبت کردیم و به توضیح نحوه کد زنی و استایل کدهای DataModel مون پرداختیم و یاد گرفتید که اگر ما بخواهیم که یک جدول بسازیم باید عینا مثل همین قضیه یک کلاس بنویسیم و یک public virtual هم واسش بنویسیم . مبحث مهم تر اگر بخواهیم که تنظیماتی که در اسکیوال سرور روی جداول اعمال میکردیم ، در محیط انتیتی فریمورک و با روش کد فرست اعمال کنیم چگونه باید اینکار رو انجام بدیم ؟ اینجاست که ویژگی DataAnnotation ها به کمک ما میان. در این قسمت یک موجودیت جدید به همین روش ایجاد میکنیم که یاد بگیرید که Code First چگونه کار میکنه. اگر ما بخواهیم یک موجودیت دیگه اضافه کنیم نباید به این شکل پیشفرض خود مایکروسافت عمل کنیم . درسته که مایکروسافت اومده موجودیت هامون رو داخل کلاس DataModel مون آورده و همه رو تو یه جا نوشته و این واسه این هستش که شما بهتر بفهمید که موجودیت ها چطوری اضافه میشن اما این کار اصلا درست نیست چون باعث شلوغی و پیچیدگی بیشتر کار میشه و بهتره که برای اینکار یک کلاس دیگه و در یک فایل جداگانه ای بزنید (یعنی برای هر موجودیت یک کلاس جداگانه بزنید).به همین منظور در قسمت سولوشن روی نام پروژه راست کلیک میکنیم و یک کلاس جدید به نام Student اضافه میکنیم. موجودیت Student رو مینویسیم و پروپرتی ها رو از قبیل Name و LastName وغیره رو داخل کلاس یا عبارتی داخل این موجودیت مینویسیم. فقط توجه داشته باشید که اگر Set و Get رو ننویسیم اون پروپرتی داخل دیتابیس Map نمیشن. میخوایم موجودیت یا کلاس Student رو وقتی ازش نمونه ساختیم داخل اسکیوال سرور ، جدولش ایجاد بشه بنابراین واسه اینکار فقط کافیه بریم داخل مدل مون یعنی DataModel و یک Public virtual که جنریک از نوع Students باشه بنویسیم و همین کار رو میکنیم .توجه داشته باشید تو بحث شئ گرایی گفتیم که اگر کلاسی متد virtual داشته باشه میتونیم پایین ش اونو OverRide کنیم و دوباره بنویسیم ولی تو مبحث انتیتی فریمورک ، متد virtual باعث میشه ما از مشخصه ی Lazy Loading استفاده کنیم ، تو انتیتی فریم ورک میتونید virtual رو ننویسید اما دیگه Lazy Loading رو رعایت نمیکنه بنابراین virtual رو برای اینکه Lazy Loading همیشه رعایت بشه بنویسید. ما در مورد مبحث Lazy Loading در پکیج Linq توضیحات کامل دادیم. گفتیم میریم داخل مدل مون یعنی DataModel و یک Public virtual که جنریک از نوع Student باشه مینویسیم.قدم بعدی از داخل Sql Server دیتابیس DB_DataModel رو پاک میکنیم. مجددا برنامه رو اجرا میکنیم و روی دکمه Get کلیک میکنیم و منتظر میشیم دیتابیس ساخته شه (داخل Button یا دکمه Get ما از کلاس تت نمونه سازی کردیم بنابراین به محض اینکه روش کلیک کنیم داخل اسکیوال سرور ، دیتابیس و جدولش ایجاد میشه). قدم بعدی دیتابیس رو رفرش میکنیم و میبینیم که دیتابیس با موفقیت ایجاد شده یعنی هم جدول MyEntities ایجاد شده هم جدول Student .فرقی نمیکنه کدوم جدول یا همون کلاس موجودیت Entity از دیتابیس رو فراخوانی کنید ، با فراخوانی یکی از جدول ها یا کلاس موجودیت ها ، علاوه بر خود آن جدول ، مابقی جداول نیز در دیتابیس ساخته میشوند.همونطور که دیدید جدول Student هم ایجاد شده و تو این جدول هم مثل مابقی جداول ، انتیتی فریمورک چون به واژه Id حساسه بنابراین Id رو کلید اصلی کرده و ما میخوایم کلید رو تغییرش بدیم و نذاریم انتیتی فریمورک بصورت پیشفرض خودش Id رو کلید کنه.نکته ای که هست اینه که تمام تنظیماتی که واسه فیلدها شما میتونید تو اسکیوال سرور انجام بدید داخل اینجا هم میتونید انجام بدید (داخل کلاس موجودیت) که بهش DataAnnotations میگن و با استفاده از این قابلیت کاری میکنیم که انتیتی فریمورک بصورت پیشفرض خودش Id رو کلید نکنه بنابراین واسه اینکار ابتدا using های مرتبط رو تعریف میکنیم.هر فیلدی رو که بالاش بنویسیم [Key] در نتیجه اون فیلد تو دیتابیس به کلید اصلی تبدیل میشه و اینجا ما بالای فیلد SID یک DataAnnotations به نام [Key] رو نوشتیم . یعنی بجای فیلد ID ، فیلد SID رو کلیدش کردیم .در کل ما تنظیمات یا DataAnnotations هایی که بالا هر فیلدی مینویسیم روی فیلد پایینی ش اعمال میشه.برای اینکه تغییرات اعمال بشن مجددا دیتابیس رو یکبار دیگه حذف میکنیم و دوباره برنامه رو اجرا میکنیم و روی دکمه Get کلیک میکنیم تا دیتابیس ساخته شه و تنظیمات جدیدی که ایجاد کردیم روی DataBase اعمال بشن.الان اگر به دیتابیس و جداول نگاه کنیم میبینیم که بدرستی ساخته شدند و فیلد SID کلید شد .پس شما با مفهوم DataAnnotations آشنا شدید . DataAnnotations های زیادی وجود داره که در این قسمت چندتاش رو میگیم و در قسمت های بعد بیشتر باهاشون کار میکنیم.

همه توضیحات ...