• 1397/09/01

مشکل در ایجاد رابطه درون جدولی با کد فرست :

سلام مهندس ممنون از دوره خوبی که برگزار کردید

من سعی کردم که دیتابیس رو کد فرست بسازم حالا به مشکلی که بر خوردم اینه که برای جدول دسته بندی ها که باید درون خود جدول رابطه برقرار کنیم نمی دونم باید با کد فرست چطور این کار رو انجام بدم. از روی پروژه خودتون و کدی که entity تولید کرده بود استفاده کردم ولی رابطه برقرار نشده  و نمیتونم از لیزی لود استفاده کنم. نمونه کد رو پایین قرار میدم. فکر میکنم باید از [foreignkey] استفاده کنم ولی چی کلید خارجی چیه

namespace DataLayer.Entities
{
    [Table("Category")]
    public class Category
    {
        public int CategoryId { get; set; }
        [Display(Name = "عنوان گروه")]
        public string CategoryName { get; set; }

        [Display(Name = "زیر گروه ها")]
        public int? ParentId { get; set; }

        public virtual ICollection<Category> Category1 { get; set; }
        public virtual Category Category2 { get; set; }
    }
}

 

  • 1397/09/01
  • ساعت 16:59

برای Code First برای این رابطه باید از Fluent Api استفاده کنید 

 


  • 1397/09/02
  • ساعت 02:03

ممنون مهندس با راهنماییتون متوجه شدم چکار باید بکنم.

برای دوستان دیگه اگه به مشکل من برخوردن

کد زیر رو تو DbContext بزارین
 

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Category>()
                .HasMany(e => e.Category1)
                .WithOptional(e => e.Category2)
                .HasForeignKey(e => e.ParentId);
        }

و کلاس جدول تون هم باید به این صورت در بیاد

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Category()
        {
            Category1 = new HashSet<Category>();
        }

        public int CategoryId { get; set; }

        [Required]
        [StringLength(100)]
        public string CategoryName { get; set; }

        public int? ParentId { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Category> Category1 { get; set; }

        public virtual Category Category2 { get; set; }

 


logo-samandehi