PDA

View Full Version : سوال: دو ارتباط یک به چند (بیش از یک ارتباط) بین دو جدول Users,Pages



delamtangete
یک شنبه 24 بهمن 1395, 18:36 عصر
اساتید عزیز خسته نباشید
بنده با یه مشکلی مواجه شدم.در تعریف کلاس ها به روش 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 تا ایجاد میشه !!!!

hakim22
سه شنبه 26 بهمن 1395, 10:13 صبح
در EF برای تعریف کلید خارجی خودتان نباید فیلدی درست کنید. این فیلدها باید توسط EF ایجاد بشه. همینکه مشخص کنید کدوم جدول با کدوم جدول بر اساس چه متغیری رابطه داره کافیه. EF خودش بر اساس تنظیماتی که بهش معرفی می کنید فیلدهای مربوط به کلیدهای خارجی رو میسازه. شما در کد هیچوقت اون رو نمیبینید. بهش احتیاجی هم ندارید.