سلام چرا از Icollection<> استفاده کردیم و چرا از list<> و یا حتی IEnumerable<> استفاده نکردیم؟
سلام،
ترتیب مشتق شدن این سه رابط به این شکله:
IEnumerable > ICollection > IList --> List
هر کدوم قابلیت هایی دارند که فرزندشون یک سری قابلیتهای دیگر به قبلیها اضافه کرده.
اگر لیستی داشتید که فقط نیاز به پیمایش داشت و تغییری در لیست ایجاد نمیشد میتونید از IEnumerable استفاده کنید. یعنی فقط ReadOnly باشه مثل لیستی که از دیتابیس واکشی میکنید و این لیست پیمایش میشه و در قسمتی نمایش داده میشه.
در EF برای پیاده سازی رابطه موجودیتها معمولا از ICollection استفاده میشه. (قابلیت Add)
IList فرزند ICollection هست بنابراین هم قابلیت پرنت رو داره و یه سری قابلیتهای اضافه بر قبلیها داره. منتها برای جلوگیری از سربار اضافی و عدم استفاده از قابلیتهای دیگه از ICollection استفاده میشه. باید ببینید در سناریویی که پیاده میکنید به چه امکاناتی نیاز دارید.
کلاس List قابلیت ساختن آبجکت رو داره و رابط IList رو implement کرده. یعنی در خودش سه کلاس دیگرو داره.
این نمونه رو هم میتونید ببینید که one-to-many رو با List پیاده کرده و many-to-many رو با ICollection.