I am using Entity Framework 4.1 using the Code First approach. I have two objects that show parent-child relationships. To provide a concrete example, imagine that I have a Category object that is associated with objects with zero Product numbers. I set navigation properties on both sides (in my example, a Category object would have an ICollection<Product> property, and a Product object would have a Category property).
Now that I get Category objects, I also want to return the number of children entries for each category. I know that I can:
Category category = dbContext.Categories.Single(...); int productCount = category.Products.Count();
But I am worried that the resulting SQL query sent to the database depends on whether I use lazy or impatient loading.
In the first case (lazy loading), calling the Products collection calls EF to run the SQL query, for example:
SELECT ... all columns ... FROM Products WHERE CategoryID = @CategoryID
In the second case (when loading) the products are loaded when information about the category is received, so there is no second request to the database, but the disadvantage is that if I am not at all interested in the products (except their account), then I return a lot of unnecessary data.
I would like for him to have the best of both worlds: namely, the ability to have only one database query and one that uses SELECT COUNT(*) , and not one that gets all the columns from the table. In short, I would like SQL to be sent to the database as follows:
SELECT ... all category columns ..., (SELECT COUNT(*) FROM Products p WHERE p.CategoryID = c.CategoryID) FROM Categories c WHERE c.CategoryID = ...
Is this even possible with EF or is this what I want to sleep tubes?