مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

mrpeach

عضویت از 1394/04/13

one to many relation

  • دوشنبه 16 آذر 1394
  • 15:06
تشکر میکنم

با سلام من دو تا جدول دارم به نام های article و category که رابطه یک به چند دارن

به وسیله کد های زیر

public virtual System.Collections.Generic.IList<Article> Article { get; set; }

public virtual System.Collections.Generic.IList<Comment> Comment { get; set; }

حالا من می خوام بدونم داخل view که مربوط به Index، Article می باشد چه طور می تونم نام category را نشون بدم؟

مثلا کد زیر کار نمیکنه

@item.Category.Title

 

این کد را داخل Index Article نوشتم

پاسخ های این پرسش

تعداد پاسخ ها : 12 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 16 آذر 1394
  • 15:21
@item.Category.First().Title

 

کاربر سایت

mrpeach

عضویت از 1394/04/13

  • دوشنبه 16 آذر 1394
  • 15:29

وقتی داخل view کد شما را قرار میدهم و برنامه را اجرا  میکنم اررور 

 'Category' does not contain a definition for 'First' and no extension method 'First' accepting a first argument of type 'Category' could be found (are you missing a using directive or an assembly reference?)

را می دهد

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 16 آذر 1394
  • 16:07

باید اول چک کنید null نباشه

میتونید از FirstOrDefault استفاده کنید

کاربر سایت

mrpeach

عضویت از 1394/04/13

  • دوشنبه 16 آذر 1394
  • 16:14

من کد شما رو به item.Category.Title.First() تغییر دادم و با FirstOrDefault هم امتحان کردم الان میگه که

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

کاربر سایت

اصغر

عضویت از 1394/03/16

  • دوشنبه 16 آذر 1394
  • 17:25

سلام 

مدل را چطوری پاس میدید؟
کد اکشن Index را قرار بدید ...

کاربر سایت

mrpeach

عضویت از 1394/04/13

  • دوشنبه 16 آذر 1394
  • 17:29
return View(db.Article.ToList());

به این صورت اطلاعات را به Index پاس می دهم

اما هر کاری میکنم از index Article نمی تونم به category  برسم

کاربر سایت

اصغر

عضویت از 1394/03/16

  • سه شنبه 17 آذر 1394
  • 22:20

خب شما اصلا Category را لود نکردید که الان بخوایید استفاده کنید... ، باید به صورت لیزی لودینگ Category را پر کنید و بعد از لود اون ، حالا مدل را پاس بدید.

برای انجام این کار هم از علاوه بر استفاده از فضای نام​ System.Data.Entity باید از دستور زیر استفاده کنید:

 



return View(db.Articles.Include(a => a.Category).ToList());


و حالا در View از همان دستوری که نوشته بودید میتونید استفاده کنید ، یعنی :

 


@item.Category.Title

 

کاربر سایت

mrpeach

عضویت از 1394/04/13

  • چهارشنبه 18 آذر 1394
  • 01:00

ممنونم دوست عزیز برای این زمانی که میزارید اما من بازم به error رسیدم

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

کاربر سایت

اصغر

عضویت از 1394/03/16

  • چهارشنبه 18 آذر 1394
  • 20:14

خواهش میکنم ، مدلی که پاس دادید Null هستش...در خطا هم به همین دلیل اشاره کرده

کاربر سایت

mrpeach

عضویت از 1394/04/13

  • جمعه 20 آذر 1394
  • 18:28

با سلام

من کد شمارا امتحان کردم و اررور را برای شما ارسال کردم و الان break point گذاشتم و کد را امتحان کردم با این کد 

db.Product.Include(p => p.Category).ToList();

اما در قسمت categroy null هست

و نمی دونم چه کاری باید انجام بدهم

کاربر سایت

mrpeach

عضویت از 1394/04/13

  • جمعه 20 آذر 1394
  • 19:14

آیا باید class DatabaseContext رو هم تغییر بدم؟

من داخل یک سایت یه چنین چیزی دیدم

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Player>()
                    .HasOptional(p => p.Team)
                    .WithMany(t => t.TeamMembers)
                    .Map(c => c.MapKey("TeamId"));

        // Or alternatively you could start from the Team object:
        modelBuilder.Entity<Team>()
                    .HasMany(t => t.TeamMembers)
                    .WithOptional(p => p.Team)
                    .Map(c => c.MapKey("TeamId"));
    }

 

کاربر سایت

اصغر

عضویت از 1394/03/16

  • شنبه 21 آذر 1394
  • 21:31

نه نیازی به اینکار نیست ، مگر درصورتی که در یک جدول بیشتر از یک ارتباط دارید ، و آن هم با جدولی یکسان ، البته این توضیحی که بنده دادم یکی از موارد این گزینه هست.

که استفاده هایی متفاوت داره...

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)