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

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

  1. #1
    مدیر بخش آواتار سعید کشاورز
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    ایران 68
    پست
    1,315
    تشکر کردن
    562
    1,067 بار تشکر شده در 587 پست

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

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

      • علمی
      • هنری

    • مقالات


    حالا توسط 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
    کاربر دائمی آواتار mr.sirwan
    تاریخ عضویت
    مهر 1394
    محل زندگی
    سردشت
    پست
    410
    تشکر کردن
    81
    177 بار تشکر شده در 159 پست

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

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

  3. کاربرانی که به خاطر مطلب مفید mr.sirwan از وی تشکر کرده‌اند:


  4. #3
    مدیر بخش آواتار سعید کشاورز
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    ایران 68
    پست
    1,315
    تشکر کردن
    562
    1,067 بار تشکر شده در 587 پست

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

    نقل قول نوشته شده توسط 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; }
    }

  5. #4
    کاربر دائمی آواتار mr.sirwan
    تاریخ عضویت
    مهر 1394
    محل زندگی
    سردشت
    پست
    410
    تشکر کردن
    81
    177 بار تشکر شده در 159 پست

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

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


  6. کاربرانی که به خاطر مطلب مفید mr.sirwan از وی تشکر کرده‌اند:


  7. #5
    مدیر بخش آواتار سعید کشاورز
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    ایران 68
    پست
    1,315
    تشکر کردن
    562
    1,067 بار تشکر شده در 587 پست

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

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

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

  8. #6
    کاربر دائمی آواتار mr.sirwan
    تاریخ عضویت
    مهر 1394
    محل زندگی
    سردشت
    پست
    410
    تشکر کردن
    81
    177 بار تشکر شده در 159 پست

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

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

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

  9. کاربرانی که به خاطر مطلب مفید mr.sirwan از وی تشکر کرده‌اند:


  10. #7
    مدیر بخش آواتار Mahmoud.Afrad
    تاریخ عضویت
    مرداد 1387
    پست
    3,664
    تشکر کردن
    58
    2,834 بار تشکر شده در 2,237 پست

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

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

  11. کاربرانی که به خاطر مطلب مفید Mahmoud.Afrad از وی تشکر کرده‌اند:


  12. #8
    مدیر بخش آواتار سعید کشاورز
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    ایران 68
    پست
    1,315
    تشکر کردن
    562
    1,067 بار تشکر شده در 587 پست

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

    نقل قول نوشته شده توسط 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
    {
    }

  13. #9
    کاربر تازه وارد
    تاریخ عضویت
    تیر 1396
    محل زندگی
    تهران
    پست
    36
    تشکر کردن
    0
    2 بار تشکر شده در 2 پست

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

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

  14. #10
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,042
    تشکر کردن
    26
    707 بار تشکر شده در 504 پست

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

    جهت مدل های خودارجاع دهنده نیازی به کانفیگ 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
    و سازنده ها را از کلاسهاتون حذف کنید
    سازنده ها را در کلاس های ویومدل بکار ببرید

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

  15. کاربرانی که به خاطر مطلب مفید ali_md110 از وی تشکر کرده‌اند:


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

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

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

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