CamDiGi
0 محصولات نمایش سبد خرید

هیچ محصولی در سبد خرید نیست.

تعریف رابطه یک به چند Entity Framework Code First

تعریف به زبان ساده:

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

مثال) به مشتری می خواهیم تعدادی خط پیامک اختصاص دهیم. جدولی داریم به نام جدول خطوط پیامکی و خط ها در آن جا تعریف می شوند. یک جدول دیگر تعریف شده به نام خطوط پیامک مشتری که در این جدول کلید جدول مشتری و کلید جدول خطوط پیامکی در آن ذخیره می شود.

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

/// <summary>
/// خطوط پیامکی مشتری

/// </summary>


public class CustomerSmsLine

{

/// <summary>

/// کد خطوط پیامکی مشتری

/// </summary>

public long CustomerSmsLineId { get; set; }

/// <summary>
/// کد خطوط پیامکی
/// </summary>
public long? SmsLineId { get; set; }

/// <summary>
/// تعریف ارتباط یک به چند
/// </summary>
public virtual SmsLine SmsLine { get; set; }

/// <summary>
/// کد مشتری
/// </summary>
public long? CustomerId { get; set; }

/// <summary>
/// تعریف ارتباط یک به چند
/// </summary>
public virtual Customer Customer { get; set; }

/// <summary>
/// تاریخ ثبت
/// </summary>
public DateTime? DateInsert { get; set; }

/// <summary>
/// حذف؟
/// </summary>
public bool? IsDeleted { get; set; }

/// <summary>
/// فعال؟
/// </summary>
public bool? Active { get; set; }
}

نکته: بنده برای ساده سازی عملیات یک کلید اصلی هم تعریف می کنم تا راحت تر بتوانم عملیات ویرایش، حذف و … را انجام دهم. البته اینکار اختیاری است. و بر این باورم ممکن است در آینده جداول دیگر به این جدول نیاز داشته باشند که براحتی می توانند از آن استفاده کنند.

سپس در فایل پیکربندی همین کلاس موارد زیر را قرار می دهیم:

public class CustomerSmsLineConfig : EntityTypeConfiguration<CustomerSmsLine>
{
public CustomerSmsLineConfig()
{
ToTable("tbl_CustomerSmsLine");
//تنظیم خصوصیت کلید اصلی که اتونامبر نباشد با توجه به اینکه آخر نام فیلد آی دی گذاشتیم کلید تعریف می شود.
Property(x => x.CustomerSmsLineId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

//ارتباط یک به چند با جدول SmsLine
HasOptional(x => x.SmsLine)//نام جدول خارجی
.WithMany(x => x.CustomerSmsLines)//نام جدول + s
.HasForeignKey(x => x.SmsLineId)//کلید خارجی
.WillCascadeOnDelete(false);

//ارتباط یک به چند با جدول Customer
HasOptional(x => x.Customer)//نام جدول خارجی
.WithMany(x => x.CustomerSmsLines)//نام جدول + s
.HasForeignKey(x => x.CustomerId)//کلید خارجی
.WillCascadeOnDelete(false);
}

}

تنها کاری که باقیمانده قرار دادن پراپرتی های ICollection ها است:

در انتهای کلاس Customer رفته و پراپرتی زیر را اضافه نمایید:

public virtual ICollection<CustomerSmsLine> CustomerSmsLines { get; set; }

و در کلاس SmsLine پراپرتی زیر:

public virtual ICollection<CustomerSmsLine> CustomerSmsLines { get; set; }

0
دیدگاه‌های نوشته

*
*