سلام دوستان
بنده یک ابهامی در ایجاد رابطه چند به چند با جداول دارم
فرض بفرمایید جدول اول: دانشجو
جدول دوم: درس
(هر درس توسط چندین دانشجو قابل اخذ است و هر دانشجو میتواند چندین درس انتخاب کند)
آیا ما در ایجاد این رابطه صرفا به استفاده از navigation property ها میتوانیم بسنده کنیم؟
یا باید حتما جدول واسطی نیز برای این رابطه ایجاد کنیم؟
همچنین در سرچ هایی که کردم دیدم پیشنهاد شده بود در متد onModelBuilder جدول سوم و کلید های خارجی آن ست شود
من واقعا گیج شدم بهترین روش کدام است؟
ef به صورت خودکار جدول واسط را ایجاد می کند و نیازی ساختن آن توسط توسعه دهنده نیست. اگر هم به این کار نیاز بود همان طور که خودتان گفتید یک جدول واسط ایجاد کنید و توسط fluent api رابطه ها را برقرار کنید.
ممنون از پاسختون اما اگر با fluent api جدول واسط رو ایجاد کنم به آن جدول دسترسی ندارم از طریق کد
در این مورد میشه راهنمایی بفرمایید چه طوری به جدولی که از این طریق ایجاد شده دسترسی داشت؟
البته هنگام اجرای متد های create مشکلی ندارم اما در هنگام متد post اکشن Edit به جدول واسط دسترسی ندارم
به صورت زیر عمل کنید:
public class Student { public int Id { get; set; } public string Name { get; set; } public ICollection<StudentCource> Courses { get; set; } } public class Cource { public int Id { get; set; } public string Name { get; set; } public ICollection<StudentCource> Students { get; set; } } public class StudentCource { public int Id { get; set; } public Student Student { get; set; } public int StudentId { get; set; } public Cource Cource { get; set; } public int CourceId { get; set; } } public class AppDbContext { protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Student>() .HasMany(q => q.Courses) .WithRequired(x => x.Student) .HasForginKey(x => x.StudentId); modelBuilder.Entity<Cource>() .HasMany(q => q.Students) .WithRequired(x => x.Cource) .HasForginKey(x => x.CourceId); } }
ممنون از پاسخ خوب و کاملتون و آخرین سوال بنده با توجه به کدی که فرستادید
آیا خط کد هایی مثل : Public Cource Cource {get;set
آیا باید از نوع virtual باشد یا به همین شکل که شما فرومدید کافیه؟
در صورت نیاز به virtual بودن از شما خواهشمندم ویرایش بفرمایید که برای همه مرجع خوبی باشه
باز هم از مثال عالی و خوبتون سپاسگذارم
اگر virtual قرار بدید از حالت Lazy Loading استفاده کردید. این مورد دلبخواه است.
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)