دو ارتباط یک به چند (بیش از یک ارتباط) بین دو جدول Users,Pages
اساتید عزیز خسته نباشید
بنده با یه مشکلی مواجه شدم.در تعریف کلاس ها به روش EF Code First به حالت زیر مشکلی که پیش میاد جدول Pages چهار تا کلید خارجی داره! در صورتی که باید دو تا داشته باشه.آیا در نحوه تعریف بنده ایرادی هست؟
در حالت کلی میخوام کاربری که رکورد رو ثبت کرده و کاربری که رکورد رو ویرایش کرده رو در جدول Pages داشته باشم
تعریف کلاس Pages:
public class Page
{
internal class Configuration : System.Data.Entity.ModelConfiguration.EntityTypeCo nfiguration<Page>
{
public Configuration()
{
HasRequired(current => current.ApplicationInsUser)
.WithMany(user => user.InsertedPages)
.HasForeignKey(current => current.ApplicationInsUserId)
.WillCascadeOnDelete(false);
HasOptional(current => current.ApplicationEditUser)
.WithMany(user => user.EditedPages)
.HasForeignKey(current => current.ApplicationEditUserId)
.WillCascadeOnDelete(false);
}
}
public Page()
{
// CreateTime = DateTime.Now;
}
[Key]
public int id { get; set; }
public string Onvan { get; set; }
[System.Web.Mvc.AllowHtml]
public string Content { get; set; }
public string ApplicationInsUserId { get; set; }
public virtual ApplicationUser ApplicationInsUser { get; set; }
public string ApplicationEditUserId { get; set; }
public virtual ApplicationUser ApplicationEditUser { get; set; }
}
}
و همچنین کلاس Users:
public virtual ICollection<Page> InsertedPages { get; set; }
public virtual ICollection<Page> EditedPages { get; set; }
وقتی فقط InsertUser رو به عنوان کلید خارجی تعریف میکنم مشکلی نیست و دیتابیس خیلی خوب و با یک کلید خارجی جنریت میشه اما وقتی EditUser رو هم اضافه میکنم کلید خارجی بجای 2 تا 4 تا ایجاد میشه !!!!
نقل قول: دو ارتباط یک به چند (بیش از یک ارتباط) بین دو جدول Users,Pages
در EF برای تعریف کلید خارجی خودتان نباید فیلدی درست کنید. این فیلدها باید توسط EF ایجاد بشه. همینکه مشخص کنید کدوم جدول با کدوم جدول بر اساس چه متغیری رابطه داره کافیه. EF خودش بر اساس تنظیماتی که بهش معرفی می کنید فیلدهای مربوط به کلیدهای خارجی رو میسازه. شما در کد هیچوقت اون رو نمیبینید. بهش احتیاجی هم ندارید.