نمایش نتایج 1 تا 10 از 10

نام تاپیک: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

  1. #1

    از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    سلام دوستان...
    یک جدول دسته بندی رو در نظر بگیرید..
    مثلا به صورت زیر و ساختار درختی:
    • خبر
      • ورزشی
        • فوتبال
        • والیبال
        • بسکتبال
        • شنا

      • علمی
      • هنری

    • مقالات


    حالا توسط Ef از کجا میشه فهمید که یک رکورد دارای فرزند است؟

    ----------------------
    یه جدول دارم به اسم Category
    یه پراپرتی گرفتم برای ایجاد رابطه خود ارجاع به صورت زیر :
    public Category Parent { get; set; }


    الان رابطه ایجاد شده و مشکلی نیست..
    حالا من لیست همه دسته بندی هارو داخل یک متغیر از نوع var میریزم.. و میخام تبدیل به ViewModel کنم
    به صورت زیر:

    var lst = from e in lstCategory
    where (id.HasValue ? e.ParentId == id : e.ParentId == null)
    select new CategoryViewModel
    {
    Id = e.Id,
    Name = e.Name,
    HasChildren = ؟؟؟؟؟؟؟
    };


    داخل Viewmodel یه پراپرتی دارم از توع Bool به نام HasChildren
    حالا میخام بفهم اگر دسته بندی پدر بود مقدار True داخلش قرار بگیره..

    جای علامت سوال چی باید بذارم؟

  2. #2

    نقل قول: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    سلام، لطفا ساختار کلاستون رو بذارین

  3. #3

    نقل قول: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    سلام، لطفا ساختار کلاستون رو بذارین



    public class Category : BaseEntity
    {
    public Category()
    {
    CreateDate = DateTime.Now;
    ViewCount = 0;
    IsPublished = false;
    ShowInSiteCategory = false;
    Profiles = new HashSet<Profile>();
    }


    /// <summary>
    /// نام دسته بندی
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// عنوان صفحه اچ تی ام ال
    /// </summary>
    public string PageTitle { get; set; }
    /// <summary>
    /// توضیحات کامل دسته بندی
    /// </summary>
    public string Content { get; set; }
    /// <summary>
    /// متا تگ سئو
    /// </summary>
    public string MetaTag { get; set; }
    /// <summary>
    /// کلمات کلیدی
    /// </summary>
    public string Keyword { get; set; }
    /// <summary>
    /// تصویر
    /// </summary>
    public string ImagePath { get; set; }
    /// <summary>
    /// آدرس سئو بهینه برای گوگل
    /// </summary>
    public string SlugUrl { get; set; }
    /// <summary>
    /// تگ Strong برای سئو
    /// </summary>
    public string StrongText { get; set; }
    /// <summary>
    /// آمار بازدید بر حسب کلیک
    /// </summary>
    public int ViewCount { get; set; }
    /// <summary>
    /// منتشر شدن دسته بندی
    /// </summary>
    public bool IsPublished { get; set; }
    /// <summary>
    /// نمایش در لیست دسته بندی های سایت
    /// </summary>
    public bool ShowInSiteCategory { get; set; }


    /// <summary>
    /// ترتیب نمایش
    /// </summary>
    public int DisplayOrder { get; set; }
    /// <summary>
    /// تاریخ ایجاد
    /// </summary>
    public DateTime CreateDate { get; set; }
    /// <summary>
    /// دسته والد
    /// </summary>
    public int? ParentId { get; set; }
    public ProfileCategory Parent { get; set; }
    public virtual ICollection<Profile> Profiles { get; set; }
    public virtual ICollection<ProfileTag> ProfileTags { get; set; }
    }

  4. #4

    نقل قول: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    به نظرم باید یه لیست از فرزندان هم توی کلاس تعریف کنین، به این شکل:
    public virtual ICollection<ProfileCategory> ProfileCategoryChilds { get; set; }


  5. #5

    نقل قول: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    به نظرم باید یه لیست از فرزندان هم توی کلاس تعریف کنین، به این شکل:
    public virtual ICollection<ProfileCategory> ProfileCategoryChilds { get; set; }

    دقیقا همین رو هم قرار دادم ..اما وقتی دیباگ میکنم Count فرزند رو 0 میزنه..بای اینکه Include هم میکنم

  6. #6

    نقل قول: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    برای ایجاد این رابطه باید از FluentAPi استفاده کنید، ببینین این کمکی میکنه:
    modelBuilder.Entity<ProfileCategory>()
    .HasOptional(pc=>pc.Parent)
    .WithMany(pc=>pc.Childs)
    .HasForeignKey(pc=>pc.ParentId);

    فقط حواستون باشه که لیست childs رو توی سازنده new کنین

  7. #7

    نقل قول: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    نقل قول نوشته شده توسط سعید کشاورز مشاهده تاپیک
    .......
    جای علامت سوال چی باید بذارم؟
     lstCategory.Any(item=> item.ParentId==e.id)

  8. #8

    نقل قول: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    نقل قول نوشته شده توسط mr.sirwan مشاهده تاپیک
    برای ایجاد این رابطه باید از FluentAPi استفاده کنید، ببینین این کمکی میکنه:
    modelBuilder.Entity<ProfileCategory>()
    .HasOptional(pc=>pc.Parent)
    .WithMany(pc=>pc.Childs)
    .HasForeignKey(pc=>pc.ParentId);

    فقط حواستون باشه که لیست childs رو توی سازنده new کنین
    مرسی...مشکل از کانفیگ کردنم بود

    الان من childs رو توی سازنده new که میکنم ریشاپر میگه که باید یه سری تغییرات بدی... علتش چیه؟

    وقتی کاراشو میزنم انجام بده تمام پراپرتی هایی که virtual هستند رو کلمه virtual رو ازشون حذف میکنه وکلاس رو به این صورت تغییر میده کلمه sealed به کلاس اضافه میکنه





    public sealed class Category : BaseEntity
    {
    }

  9. #9
    محروم شده
    تاریخ عضویت
    تیر 1396
    محل زندگی
    تهران
    پست
    47

    نقل قول: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    کاربرد این مطلب را هم میگوئید؟

  10.  

  11. #10
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,104

    نقل قول: از کجا بفهمیم در رابطه خود ارجاع یک رکورد پدر است و فرزند دارد؟

    جهت مدل های خودارجاع دهنده نیازی به کانفیگ fluent نیست خود ef اینها را مدیریت میکند
    این مدل ProfileCategory یک مدل به جز Category هست؟


    public ProfileCategory Parent { get; set; }

    اگر اینطور هست مدل شما خود ارجاع دهنده نیست
    کلاس زیر در نظر بگیرید این یک مدل خود ارجاع دهنده هست

    public class Menu
    {
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    [ForeignKey("ParentId")]
    public virtual Menu Parent { get; set; }
    public virtual int? ParentId { get; set; }
    public virtual ICollection<Menu> Childs { get; set; }

    }

    این یک مدل خو ارجاع دهنده هست
    جهت کلاسهای poco به این نکته توجه کنید:
    فیلدهای کلاسهاتون مخصوصا فیلدهای navigation propertyبصورت virtual تعریف کنید جهت lazy loading
    و سازنده ها را از کلاسهاتون حذف کنید
    سازنده ها را در کلاس های ویومدل بکار ببرید

    ودر پاسخ به سوال اولتون فیلدی که نال هست میشود رکورد پدر و کالکشن های زیر مجموعه آن میشود رکوردهای فرزند آن سطر

تاپیک های مشابه

  1. سوال: از کجا بفهمیم ارتباط کلاینت با سرور در شبکه بعد از true شدن اتصال کانکشن قطع شده
    نوشته شده توسط SirMehdi در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 9
    آخرین پست: چهارشنبه 25 مهر 1397, 11:41 صبح
  2. از کجا بفهمیم که توی کتابخانه ها چه کلاسهایی و چه توابعی وجود دارد؟
    نوشته شده توسط A_2006 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 6
    آخرین پست: یک شنبه 01 اردیبهشت 1392, 21:21 عصر
  3. از کجا بفهمیم در اسکریت شل آپ شده؟
    نوشته شده توسط tick-tock در بخش PHP
    پاسخ: 5
    آخرین پست: دوشنبه 05 دی 1390, 04:20 صبح
  4. exceptionپیدا کردن در رابطه با حذف یک رکورد
    نوشته شده توسط anahita6 در بخش C#‎‎
    پاسخ: 4
    آخرین پست: دوشنبه 22 تیر 1388, 23:38 عصر
  5. از کجا بفهمیم که یک برنامه run هست
    نوشته شده توسط american_iran2006 در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: دوشنبه 21 اسفند 1385, 11:51 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •