در نوشته تعریف رابطه ها در Entity Framework – بخش نخست در مورد ایجاد رابطه یک به چند در رویکرد Code First گفتگو کردیم و در ادامه ایجاد رابطه ها در Entity Framework، در این نوشته می خواهیم رابطه چند به چند را آموزش دهیم. برای نمونه نمونه گمان کنید سایت آموزش دارید که در آن دوره های متفاوتی را ارائه می دهید. هر دانشجو می تواند چندین دوره را بگیرد و در هر دوره چندین دانشجو شرکت خواهند کرد، پس میان دو جدول Course و Student یک رابطه چند به چند وجود دارد.

در کد شکل های زیر می بینید که درون کلاس Student یک خصوصیت Collection مجازی (Virtual) از نوع کلاس Course وجود دارد و همین مطلب برای کلاس Course نیز پیاده سازی شده است. بنابراین با قاعده ۱۰ ، رابطه چند به چند میان این دو کلاس را بوسیله Collection ها نشان داده ایم.

برای ایجاد رابطه چند به چند، باید یک جدول سومی به نام جدولی میانی یا جدول Pivot را به کار ببریم که حتما باید دارای دو ستون به عنوان کلیدهای خارجی باشد که هر کدام از آنها به یکی از جدول های درون رابطه اشاره می کند. نام این جدول از قاعده ۱۱ پیروی می کند که نام آمیخته ای از نام دو جدول درون رابطه چند به چند است. همانگونه که می بینید، درون جدول میانی، دو ویژگی به نام های StudentId و CourceId از گونه int هست که هر کدام به کلید اصلی یکی از جدول های Student و Cource اشاره دارند.

قاعده های تازه برای رابطه چند به چند

قاعده ۱۰ – برای ایجاد رابطه چند به چند در رویکرد Code First در هر دو کلاس باید خصوصیت های Collection مجازی از نوع کلاس دیگری باشد. توجه کنید که چون در رابطه چند به چند کلیدهای خارجی درون کلاس Pivot  قرار دارند، پس نباید همانند آنچه که در مورد کلاس Course در مطلب پیشین گفته شد، آنها را درون کلاس ها و به صورت خصوصیت مجازی از نوع کلاس دیگری تعریف کنیم.

قاعده ۱۱ – نام کلاس میانی (Pivot) چگونه تعیین می شود؟ Entity Framework آنرا به صورت خودکار ایجاد و آنرا با ترکیب نام دو کلاس درون رابطه چند به چند نامگذاری می کند. به طور مثال در اینجا نام جدول میانی به صورت StudentCource نامگذاری می شود. همچنین درون جدول Pivot باید برای هر کدام از کلیدهای اصلی جدول های درون رابطه، یک ویژگی از همان گونه کلید اصلی نوشته شده باشد.

اگر درک این قاعده ها و پیروی از آنها سخت و پیچیده است، نگران نباشید، چون که Dot Net (و همچنین Dot Net Core) راهکارهایی به نام Data Annotation و Fluent API است که کار نوشتن کلاس های Entity در رویکرد Code First را ساده می کنند. این دو راهکار، قواعد پیچیده را کنار گذاشته و اجازه می دهند تا برنامه نویس به سادگی، کلاس های دلخواه را ایجاد کنند. این دو راهکار از همه آنچه که شما برای نوشتن کلاس های Entity نیاز دارید، پشتیبانی می کنند.