Entity Framework
Best Practices
- Use
Select
to load less data from the DB
// ❌ Bad Example -> Loads all user data from DB var user = users.SingleOrDefault(u => u.Id == request.Id); var dto = user.Select(u => new UserDto(u.FirstName)); // ✅ Good Example -> Loads only FirstName from DB users.Select(u => new UserDto(u.FirstName)) .SingleOrDefault(u => u.Id == request.Id);
- Prevent a cartesian explosion by using
SplitQuery
in cases where we have a lot of data getting joined. This reduces the data loaded but has some overhead and should therefore only be used when we expect to have a lot of DB in the table.
// ❌ Bad Example -> Loads a blog multiple times (once for each post) var blogs = context.Blogs .Include(blog => blog.Posts) .ToList(); // ✅ Good Example -> Loads The blog post only once var blogs = context.Blogs .Include(blog => blog.Posts) .AsSplitQuery() // <== 👁️ .ToList();
- ````