PDA

View Full Version : تغییر مدلهای قبلی بعد از آپدیت مدل از دیتا بیس



AmirSky
پنج شنبه 27 فروردین 1394, 14:38 عصر
سلام
وقتی مدل رو آپدیت میکنم تا یه تیبل به مدل اضافه بشه میبینم که همه کلاس تیبل های قبلی تغییر کرده و به حالت اولیه در میاد. و همه ولیدیشن هایی که نوشته بودم پاک میشه.
منظورم اینه: Update Model From Database

لطفا راهنمایی

alireza_s_84
پنج شنبه 27 فروردین 1394, 21:38 عصر
سلام
وقتی مدل رو آپدیت میکنم تا یه تیبل به مدل اضافه بشه میبینم که همه کلاس تیبل های قبلی تغییر کرده و به حالت اولیه در میاد. و همه ولیدیشن هایی که نوشته بودم پاک میشه.
منظورم اینه: Update Model From Database

لطفا راهنمایی

شما وقتی کوچکترین تغییری در مدل میدی دوباره کل کلاسها از نو ساخته میشن و باعث میشه تمامی Data Annotation هایی که برای اعتبارسنجی نوشتی از بین بره برای جلوگیری از این کار باید از یک کلاس واسط استفاده کنی تا کار امضا کردن خصوصیات کلاس مدل رو برای شما انجام بده. برای مثال من یک کلاس در مدلم دارم با خصوصیات زیر (کلاسی که EF تولید کرده):

public partial class User
{
public int UserId { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}

حتما باید کلاستون Partial باشه که خوشبختانه EF بطور خودکار کلاسهایی که تولید میکنه Partial هستن ، بعد نوبت ساخت کلاس MetaData هست که توی اون خصوصیات کلاس فوق رو حاشیه نویسی میکنیم ، فقط خصوصیاتی رو توی این کلاس میاریم که قراره حاشیه نویسی بشن و نیازی به ذکر همه خصوصیات نیست:

public class UserMetadata
{
[Display(Name = "نام کاربری")]
[Required(AllowEmptyStrings = false, ErrorMessage = "نام کاربری را وارد کنید.")]
public string Username { get; set; }


[Display(Name = "گذر واژه")]
[Required(AllowEmptyStrings = false, ErrorMessage = "گذر واژه را وارد کنید.")]
public string Password { get; set; }


[Display(Name = "رایانامه")]
[Required(AllowEmptyStrings = false, ErrorMessage = "رایانامه خود را وارد کنید.")]
public string Email { get; set; }
}


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

[MetadataType(typeof(UserMetadata))]
public partial class User
{
}


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

tomart
پنج شنبه 25 تیر 1394, 13:28 عصر
سپاس فراوان