View Full Version : تعریف پروپرتی ها مشخص و استفاده در همه جا
jaykob
یک شنبه 21 اردیبهشت 1393, 19:14 عصر
سلام دوستان
من به طور مثال 50 تا کلاس دارم که در همه اونها یکسری پروپرتی ها با attribute های خاص یکسان هستند مثل Name و Phone و ... به چه شکل می تونم این پروپرتی هارو یکجا تعریف کنم و در کلاس هام که همون مدل هام هستند از اونها استفاده کنم که یک مورد رو چندین بار تکرار نکنم ؟
ممنون
Amir Oveisi
دوشنبه 22 اردیبهشت 1393, 04:40 صبح
خوب یک کلاس پایه تعریف کنید و مدل های مورد نظرتون رو از اون به ارث ببرید.
یا یک property از کلاس پایه در همه مدل های مورد نظر ایجاد کنید.
jaykob
چهارشنبه 24 اردیبهشت 1393, 08:44 صبح
خوب یک کلاس پایه تعریف کنید و مدل های مورد نظرتون رو از اون به ارث ببرید.
یا یک property از کلاس پایه در همه مدل های مورد نظر ایجاد کنید.
سلام
لطف می کنید یک مثال بزنید ؟
Amir Oveisi
پنج شنبه 25 اردیبهشت 1393, 05:33 صبح
مثلا فرض کنید من در پروژم میخوام برای هر رکوردی که ثبت یا ویرایش میشه، ثبت کنم که چه کاربری و در چه تاریخی این کار رو انجام داده، برای اینکار نیاز دارم که در مدل های مورد نظرم فیلد هایی براش در نظر بگیرم مثلا فیلد CreatedBy و ModifiedBy و ...
حالا به جای اینکه بیام این property ها رو برای همه مدل هام تکرار کنم، یک کلاس تعریف میکنم بصورت زیر:
public class BaseEntity
{
[ScaffoldColumn(false)]
[DisplayName("ایجاد شده توسط")]
public virtual UserProfile CreatedBy { get; set; }
[ScaffoldColumn(false)]
[DisplayName("ایجاد شده توسط")]
[ForeignKey("CreatedBy")]
public int? CreatedById { get; set; }
[ScaffoldColumn(false)]
[DisplayName("ویرایش شده توسط")]
public virtual UserProfile LastModifiedBy { get; set; }
[ScaffoldColumn(false)]
[DisplayName("ویرایش شده توسط")]
[ForeignKey("LastModifiedBy")]
public int? LastModifiedById { get; set; }
[ScaffoldColumn(false)]
[DisplayName("تاریخ ایجاد")]
public DateTime? CreationDate { get; set; }
[ScaffoldColumn(false)]
[DisplayName("تاریخ ویرایش")]
public DateTime? LastModifiedDate { get; set; }
}
این کلاس اون فیلد هایی که من میخوام توی بقیه مدل ها استفاده بشن رو داره، ولی دقت کنید که خود این کلاس رو به عنوان DbSet برای DbContext ام معرفی نمی کنم. در واقع قرار نیست برای این کلاس یک جدول در دیتابیس ساخته بشه.
بعد از این کار، مدل هایی که میخوام تعریف کنم، از این کلاس ارث میبرن:
[DisplayName("پروژه سرمایه گذاری")]
[Table("InvestmentProjects")]
[ReportGenerator(IsEnabled = true)]
public class InvestmentProject : BaseEntity
{
[ReportGenerator(IsEnabled = false)]
public int Id { get; set; }
[DisplayName("نام پروژه")]
public string Title { get; set; }
[DisplayName("نام")]
public string InvesterName { get; set; }
[DisplayName("نام خانوادگی")]
public string InvesterLastName { get; set; }
}
با این کار، این مدل من property های کلاس پایه رو هم داره و زمانی که جدولش ساخته میشه اون فیلد ها هم ساخته میشن و مجبور نیستم که برای همه مدل ها این property های تکراری رو ایجاد کنم.
jaykob
پنج شنبه 25 اردیبهشت 1393, 08:52 صبح
خیلی لطف کردید آقا دقیقا منظورم همین بود
فقط حالا این موضوع برای پروژه ای که کلاس های زیادی داشته باشه کار استانداردی و صحیحی است ؟
تشکر
Amir Oveisi
پنج شنبه 25 اردیبهشت 1393, 13:36 عصر
بله، استفاده از ارث بری در چنین سناریو هایی به خوبی جوابگو هست و مشکلی هم ایجاد نمیکنه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.