سلام کاربران عزیز امیدوارم که صبح خوب و شادی را آغاز کرده باشید و سلامت باشید و اماده یکی دیگر از آموزشهای امروز ما که در مورد Database First در  Entity Framework باشید.دوستان باما در ادامه همراه باشید ..

بهبود بخشیدن ارزیابی داده EF Database First با ASP.NET MVC

با استفاده از MVC ،Entity Framework و ASP.NET Scaffolding می توانید یک برنامه ی وب تولید کنید که یک اینترفیس به یک دیتابیس موجود ارائه می دهد. این سری آموزش به شما نشان می دهد که چگونه به طور خودکار کدی تولید کنید که کاربرها را قادر سازد تا داده ای را که در دیتابیس وجود دارد، نمایش دهند، ویرایش، ایجاد و یا حذف کنند. کد تولید شده با ستون های جدول دیتابیس مطابقت دارد.

این بخش از آموزش بر روی افزودن حاشیه نویسی داده بر روی مدل داده برای تعیین ضروریات ارزیابی، تمرکز می کند. به وسیله ی بازخوردهایی از طرف کاربرها در بخش کامنت ها بهبود پیدا کرد.

افزودن حاشیه های داده

همانطور که در موضوع قبل مشاهده کردید برخی قوانین ارزیابی به طور خودکار برای ورودی کاربر به کار گرفته می شوند. برای مثال برای پراپرتی Grade می توانید تعدادی ارائه کنید. برای ارائه ی قوانین بیشتر ارزیابی داده می توانید حاشیه ی داده(annotations) را به گروه داده اضافه کنید. این حاشیه ها از طریق برنامه ی وب شما برای پراپرتی خاصی به کار گرفته می شوند.

در این آموزش حاشیه ها را اضافه می کنید تا طول مقادیر ارائه شده برای پراپرتی های FirstName، LastName و MiddleName را محدود کنید. در دیتابیس این مقادیر محدود به ۵۰ کاراکتر می باشند، به هرحال در برنامه ی وب شما آن کاراکتر محدود اعمال نمی شود. اگر یک کاربر بیشتر از ۵۰ کاراکتر برای یکی از این مقادیر ارائه دهد، در هنگام سعی برای ذخیره ی مقدار به دیتابیس، صفحه از هم خواهد پاشید. شما همچنین Grade را به مقادیر بین ۰ و ۴ محدود خواهید کرد.

فایل Student.cs را در فولدر Models باز کنید و کد مشخص شده ی زیر را به گروه اضافه کنید.

namespace ContosoSite.Models
‎{‎
‎ using System;‎
‎ using System.Collections.Generic;‎
‎ using System.ComponentModel.DataAnnotations;‎
‎ public partial class Student
‎ {‎
‎ public Student()‎
‎ {‎
‎ this.Enrollments = new HashSet();‎
‎ }‎
‎ public int StudentID { get; set; }‎
‎ [StringLength(50)]‎
‎ public string LastName { get; set; }‎
‎ [StringLength(50)]‎
‎ public string FirstName { get; set; }‎
‎ public Nullable<system.< span=””></system.<>DateTime> EnrollmentDate { ‎get; set; }‎
‎ [StringLength(50)]‎
‎ public string MiddleName { get; set; }‎
‎ public virtual ICollection Enrollments { get; set; }‎
‎ }‎
‎}‎

در Enrollment.cs کد مشخص شده ی زیر را اضافه کنید.

namespace ContosoSite.Models
‎{‎
‎ using System;‎
‎ using System.Collections.Generic;‎
‎ using System.ComponentModel.DataAnnotations;‎
‎ public partial class Enrollment
{‎
‎ public int EnrollmentID { get; set; }‎
‎ [Range(0‎،‎ ۴)]‎
‎ public Nullable<decimal> Grade { get; set; }‎
‎ public int CourseID { get; set; }‎
‎ public int StudentID { get; set; }‎
‎ public virtual Course Course { get; set; }‎
‎ public virtual Student Student { get; set; }‎
‎ }‎
‎}‎

راه حل را بسازید.

برای ویرایش یا ایجاد یک دانش آموز یک صفحه انتخاب کنید. اگر سعی کنید بیشتر از ۵۰ کاراکتر وارد کنید، یک پیغام خطا نمایش داده می شود.

صفحه را برای ویرایش ثبت ها انتخاب کنید، یک تلاش برای ارائه ی یک گرید بالای ۴٫ برای یک لیست کامل از حاشیه های ارزیابی داده می توانید برای پراپرتی ها و گروه ها به کار ببرید. System.ComponentModel.DataAnnotations را بررسی کنید.

افزودن گروه های متادیتا

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

برای جلوگیری از این مشکل می توانید یک گروه متا دیتا اضافه کنید که حاوی عبارات می باشد. وقتی که شما گروه مدل را با گروه متادیتا در ارتباط قرار می دهید، آن عبارت ها روی مدل به کار گرفته می شوند. در این دیدگاه گروه مدل می تواند دوباره تولید شود، بدون از دست دادن همه ی عباراتی که برای گروه متادیتا به کار گرفته شده اند.

در فولدر Modelsگروهی به نام Metadata.csرا اضافه کنید.

کد زیر را جایگزین کد موجود در Metadata.cs کنید.

using System;‎
using System.ComponentModel.DataAnnotations;‎
namespace ContosoSite.Models
‎{‎
‎ public class StudentMetadata
{‎
‎ [StringLength(50)]‎
‎ public string LastName;‎
‎ [StringLength(50)]‎
‎ public string FirstName;‎
‎ [StringLength(50)]‎
‎ public string MiddleName;‎
‎ }‎
‎ public class EnrollmentMetadata
{‎
‎ [Range(0‎،‎ ۴)]‎
‎ public Nullable<decimal> Grade;‎
‎ }‎
‎}‎

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

در فولدر Modelsیک گروه به نام PartialClasses.csاضافه کنید.

کد زیر را جایگزین محتوای فایل کنید.

using System;‎
using System.ComponentModel.DataAnnotations;‎
namespace ContosoSite.Models
‎{‎
‎ [MetadataType(typeof(StudentMetadata))]‎
‎ public partial class Student
{‎
‎ }‎
‎ [MetadataType(typeof(EnrollmentMetadata))]‎
‎ public partial class Enrollment
{‎
‎ }‎
‎}‎

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

برای اینکه گروه های به طور خودکار تولید شده را دوباره تولید کنید، فایل ContosoModel.edmx را باز کنید. یک بار دیگر روی سطح طراحی کلیک راست کرده و Update Model from Database را انتخاب کنید. گرچه دیتابیس را تغییر نداده اید، این فرایند گروه ها را دوباره تولید خواهد کرد. در تب Refresh عبارات Tables و Finishرا انتخاب کنید.

برای به کار گرفتن تغییرات فایل ContosoModel.edmx را ذخیره کنید.

فایل Student.cs یا Enrollment.cs را باز کنید و توجه داشته باشید که عبارات ارزیابی داده که قبلا به کار گرفته بودید، دیگر در فایل نیستند. به هرحال برنامه را اجرا کرده و توجه داشته باشید که وقتی داده را وارد می کنید، هنوز قوانین ارزیابی به کار گرفته می شوند.