tgoop.com/fullStackDevs/408
Last Update:
#EfCore_Best_Practice
Solve the problem 1+N in Ef Core
حل مشکل 1+N در Ef Core
این مشکل در correlated subqueries رخ میدهد.
به عنوان مثال در کوئری زیر var query = context.Customers.Select(
ابتدا کوئری برای دریافت لیستی از
c =>
c.Orders.Where(o => o.Amount > 100).Select(o => o.Amount)
);Customers
به دیتابیس ارسال میشود .
و به ازای هر Customer
کوئری زیر c.Orders.Where(o => o.Amount > 100).Select(o => o.Amount)
ترجمه و به سمت دیتابیس ارسال میشود.
این مشکل با نام مشکل 1+N شناحته میشود.
از Ef Core 2.1 به بعد Optimization
ای برای این قبیل کوئری ها انجام شده است که از وقوع این مشکل جلوگیری میکند و سبب میشود که کوئری بالا حداکثر به دو اس کیو ال کوئری ترجمه شود.
کوئری اول سلکتی برای Customer
ها و کوئری دوم اعمال فیلتری بر روی Order
ها
برای انجام اینکار هم نیاز به انجام یک تغییر کوچک در کوئری خود دارید.var query = context.Customers.Select(
کافیست به
c => c.Orders.Where(o => o.Amount > 100).Select(o => o.Amount).ToList());SubQuery
خود متد ToList()
را اضافه کنید .
اطلاعات بیشتر در مورد این مسئله را می توانید در Issue 4007 مربوط به ریپازیتوری Ef Core مشاهده و دنبال کنید.
@fullStackDevs
BY Web Devs
Share with your friend now:
tgoop.com/fullStackDevs/408