فرشید جهان منش
فرشید جهان منش
خواندن ۱ دقیقه·۴ سال پیش

Cartesian Explosion در EF Core چیست؟


Ef Core یک ORM هست که اومده تا برنامه نویسی رو برای ما ساده تر کنه.

الان میخوایم درباره Cartesian Explosion صحبت کنیم.

اصلا اینی که نوشتم چیه؟!

Cartesian Explosion مرتبط با join زدن های ماست. وقتی ما یک عملیات join انجام میدیم ، ستون های یکی از جداول ما به تعداد X بار توی joined table تکرار میشن.

var customers = context.customers .include(a => a.address) .ToList();



به طور مثال کد بالا رو در نظر بگیرید . روی جدول customer ها ، اومدیم include زدیم تا آدرس ها رو بدست بیاریم (وقتی include میزنیم در اصل داریم از left join استفاده می کنیم).

خب ، کوئری که توسط Ef برای ما تولید میشه رو در زیر میتونید ببینید.

Select * From Customers Left Join Address on Address.Id = Customers.AddressId



خب همون طوری که میبینید ، ستون های جدول customer ، 500 بار تکرار شدن .(الان ستون خاصی نداره و فقط کلیدش هست). خب حالا فکر کنید که دارید با یک مجموعه داده پیچیده کار میکنید و چندین include هم دارین می زنین. وضعیت وحشتناکی پیش میاد. مگ نه؟! این وضعیت وحشت ناک رو cartesian explosion میگن.

یه راه حل دم دستی برای این قضیه اینه که بیاید customer رو جدا لود کنید ، بعد address هارو هم جدا لود کنید و بر اساس قابلیت Fix-Up در Ef Core ، ارتباط بین دیتا ها به درستی ست میشه.

ولی توی Ef Core 5 ، یک قابلیت جدید اومد تحت عنوان split queries که می تونید دربارش توی این لینک (مقاله خودم) بخونید.

موفق باشید.

EFCoreef coreentity framework coreentity framework
یک عدد برنامه نویس دات نت .علاقه مند به تکنولوژی های روز. جوون و پر از انگیزه :) همینا برای شناختم کافی نیست؟!
شاید از این پست‌ها خوشتان بیاید