آموزش رابطه با Fluent Api در Ef Core

آموزش رابطه با Fluent Api در Ef Core

لینک کوتاه آموزش: https://www.nonevisan.ir/c/513e0

اگر قصد این را دارید که یک سایت با Asp.net Core برنامه نویسی کنید پس قطعا به Ef نیاز پیدا میکنید چرا که باید بین جداول خود رابطه برقرار کنید برای مثال فکر کنید و یک جدول مدرسین دارید و یک جدول آموزش دقیقا مثل نونویسان پس به یک رابطه یک به چند باید برقرار بشه چون هر مدرس میتونه بینهایت آموزش بزاره ولی هر آموزش تنها میتونه برای یک مدرس باشه پس تا آخر مقاله همراه ما باشید تا رابطه با Fluent Api در Ef Core را کامل یاد بگیرید

811fc3c9-174b-482f-9515-083d7cc66627.jpg

این آموزش فاقد ویدئو آموزشی است

اگر قصد دارید با Fluent Api در Asp.net Core رابطه برقرار کنید اول از همه وارد کلاس context شوید و در انتهای کلاس کد زیر را اضافه کنید و بعد از اضافه کردن کد زیر باید داخل کد شروع کنید روابط خود را ایجاد کنید پس وارد context شوید و کد را وارد کنید

protected override void OnModelCreating(ModelBuilder modelBuilder)
}

           

{

در بین بلوک ها شروع بع کدنویسی کنید اول از همه میریم سراغ رابطه یک به یک در Ef Core فرض کنید یک جدول دارید برای کتاب و یک جدول دیگر برای توضیحات کتاب حالا چون برای هر کتاب یک توضیح است و هر توضیح متعلق به یک کتاب است باید رابطه خود را یک به یک بزنید اولین قدم این است که آیدی جدول توضیحات کتاب را در جدول کتاب قرار دهید پس مثل کد زیر عمل کنید

RelationInBookTable

public int BookDetailId { get; set; }
        public BookDetailApi BookDetailApi { get; set; }

برای ارتباط یک Property از نوع BookDetailApi که همان توضیحات است در جدول کتاب درست میکنید و برای ForeignKey یا همان ارتباط کلید اصلی توضیحات کتاب را به صورت int در بالای BookDetailApi قرار میدهید و بعد وارد جدول BookDetailApi یا همان توضیحات کتاب شوید و یک Property از نوع BookApi یا همان کتاب مثل کد زیر ایجاد کنید

RelationInBookDetailTable

public BookApi BookApi { get; set; }

چون توضیحات کتاب باید هنگام ایجاد کتاب جدید در جدول کتاب قرار بگیرد فقط در جدول BookApi لازم است که ForeignKey جدول توضیحات را قرار دهید در تصاویر هم میتوانید شکل کد را ببینید حالا وارد کلاس context شوید و بین بلوک هایی که بالاتر گفته شد شروع به کدنویسی کنید و کد زیر را وارد کنید تا بهتون توضیحات کامل کد را بدم

modelBuilder.Entity<BookApi>().HasOne(b => b.BookDetailApi)
             ;WithOne(b => b.BookApi).HasForeignKey<BookApi>(b => b.BookDetailId).

در بین بلوک باید کد بالا نوشته شود modelBuilder نامی است که ما خودمون بالاتر برای متد قرار دادیم Entity یعنی برای چه جدولی رابطه میخواهید از آنجایی که هنگام ثبت کتاب جدید توضیحات باید از طریق کتاب پر شود پس قطعا باید BookApi یا قرار دهیم یعنی برای جدول کتاب رابطه میخواهیم HasOne یعنی یک پس چون دوتا HasOne وجود دارد یعنی یک به یک در HasForeignKey باید جدولی را قرار دهید که  ForeignKey در آن قرار دارد اگر یادتان باشد ما بین کتاب و توضیحات فقط در جدول کتاب توضیحات قرار دادیم پس BookApi را انتخاب میکنیم و ForeignKey را BookDetailId قرار میدهیم با توجه به تصویر زیر میتوانید کد بالاهم کامل مشاهده کنید

RelationWithFluentApiForBookAndBookDetail

حالا نوبت رابطه یک به چند در Ef Core هستش برای این رابطه میتوان رابطه بین جدول انتشارات و کتاب را مثال زد چون هر کتاب متعلق به یک انتشارات است اما هر انتشارات میتواند هرچندتا کتاب داشته باشد پس وارد جدول Book میشوید و کد زیر که هم Property و هم ForeignKey است را باید در جدول کتاب بنویسید Property باید از جنس Publisher یا همان انتشارات باشد و آیدی جدول انتشارات هم در بالای Property قرار بگیرد تا پروژه متوجه رابطه شود میتوانید طبث تصویر و کد زیر عمل کنید

Book2FluentApi

public int PunlisherId { get; set; }
        public PunlisherApi PunlisherApi { get; set; }

اینجا باید دقت کنید از آنجایی که هر کتاب متعلق به یک انتشارات است لازم نبود Property از جنس لیست باشد اما چون هر انتشارات میتواند هرچندتا کتاب داشته باشد دیگه باید وارد لیست ها شویم پس وارد جدول انتشارات یا همان Publisher میشوید و طبق تصویر و کد زیر عمل میکنید

PublisherTableInFluentApi

public List<BookApi> bookApis { get; set; }

بازم دقت کنید چون انتشارات هنگام اضافه کردن کتاب در صفحه کتاب انتخاب میشود ForeignKey در جدول BookApi قرار میگیرد و حتما به لیست هم دقت کنید که بستگی دارد به اینکه رابطه چند به چند باشد حالا بازم باید وارد کلاس context شوید و مجدد بین بلوک کد زیر را اضافه کنید

RelationInBookAndPublisherInFluentApi

()<modelBuilder.Entity<BookApi
                HasOne(p => p.PunlisherApi).
                WithMany(b => b.bookApis).
                ;HasForeignKey(f => f.PunlisherId).

تنها تفاوتی که اینجا وجود دارد بجای اینکه در هر دو رابطه از HasOne استفاده شود دیگر WithMany هم استفاده میشود بازهم جلوی Entity جدول BookApi را قرار میدهیم چون باید انتشارات در کتاب نمایش داده شود و دیگر بخش ها بجز WithMany یکی است که این کلمه یعنی چند حالا این رابطه یک به چند میشود پس PunlisherApi یک رابطه یک به چند با bookApis دارند معنی کد بالا یعنی هر یک انتشارات چند کتاب دارد که کامل واضح است

در انتها نوبت رابطه چند به چند در Ef Core است که میتوان براش مثال کتاب و نویسنده رو زد هر نویسنده میتواند چندتا کتاب داشته باشد و هرکتاب هم میتوانید همزمان توسط چند نویسنده نوشته شده باشد در روابط چند به چند باید یک جدول واسط برای ارتباط بین دو جدول نیاز است اسم جدول کتاب BookApi در نظر گرفته شده و نویسنده AutherApi پس میتوان جدول رابط را BookAutherApi در نظر گرفت از آنجا که چند به چند است رابطه پس در هر دو جدول لیست ایجاد میکنیم اول باید وارد جدول BookApi شد و لیستی از جنس BookAutherApi ایجاد کرد طبق کد زیر

public ICollection<BookAutherApi> BookAutherApis { get; set; }

به جای List میتوان از ICollection استفاده کرد که در اینجا برای شما همان کار لیست را انجام میدهد و بعد وارد جدول AutherApi میشوید و در اونجا هم لیستی از جنس BookAutherApi میسازید مثل کد زیر

public ICollection<BookAutherApi> BookAutherApis { get; set; }

دقت کنید دیگر لازم نیست Id کلاس AutherApi را به عنوان ForeignKey در BookApi قرار دهید چون رابطه چند به چند است ForeignKey در کلاس واسط طبق شکل زیر قرار میگیرد

BookAutherApi

هر دو ForeignKey جداول در جدول واسط قرار میگیرد و هر دو جدول Book و Auther به جدول واسط رابطه چند به چند دارند اما در جدول واسط دیگه لیست قرار نمیدهیم و به صورت ساده کد را مینویسیم و ForeignKey هاهم در همان زیر قرار میدهیم کاملا مثل تصویر حالا مجدد باید وارد کلاس context شویم و رابطه را با Fluent Api بزنیم در رابطه چند به چند سه قسمت کد لازم هست که باید طبق کد و تصویر زیر عمل کنید

RelationWithFluentApiForBookAndAuther

()<modelBuilder.Entity<BookAutherApi
                ;HasKey(ba => new { ba.AutherId, ba.BookId }).

            ()<modelBuilder.Entity<BookAutherApi
                HasOne(s => s.BookApi).WithMany(s => s.BookAutherApis).
                ;HasForeignKey(s => s.BookId).

            ()<modelBuilder.Entity<BookAutherApi
                HasOne(s => s.AutherApi).WithMany(s => s.BookAutherApis).
                ;HasForeignKey(s => s.AutherId).

قطعه کد اول برای انتخاب کلید اصلی جدول است از آنجایی که جدول حکم واسط دارد پس در HasKey برای BookAutherApi دو کلید اصلی انتخاب میکنید که هر دو کلید آیدی های دو جدول Book و Auther است که در کلاس واسط نوشته شده بود در مرحله بعد باید برای این جدول دونا رابطه زد یکی BookAutherApi با Auther که یک به چند باید باشد و در Entity باید BookAutherApi نوشته شود و یک رابطه یک به چند هم باید با Book داشته باشد تا رابطه چند به چند بشود و در هرکدوم از ForeignKey هایی که توی روابط نوشته میشه باید وارد کلاس واسط شوید و دو ForeignKey که در کلاس قرار دادید در بخش HasForeignKey قرار بدهید هر رابطه اول BookId و در دوم AutherId به عنوان ForeignKey انتخاب شده است این بود آموزش رابطه با Fluent Api در Ef Core اگر سوال یا مشکلی داشتید وارد بخش مدرسین شوید وارد بیوگرافی محمد مهدی زارع شوید و به شماره بنده در واتساپ پیام دهید امیدوارم آموزش براتون مفید باشه

دنبال کردن ما در تلگرام