C# Entity-Framework: How can I combine a .Find and .Include on a Model Object?
You can use Include()
first, then retrieve a single object from the resulting query:
Item item = db.Items
.Include(i => i.Category)
.Include(i => i.Brand)
.FirstOrDefault(x => x.ItemId == id);
Dennis' answer is using Include
and SingleOrDefault
. The latter goes round-tripping to database.
An alternative, is to use Find
, in combination with Load
, for explicit loading of related entities...
Below an MSDN example:
using (var context = new BloggingContext())
{
var post = context.Posts.Find(2);
// Load the blog related to a given post
context.Entry(post).Reference(p => p.Blog).Load();
// Load the blog related to a given post using a string
context.Entry(post).Reference("Blog").Load();
var blog = context.Blogs.Find(1);
// Load the posts related to a given blog
context.Entry(blog).Collection(p => p.Posts).Load();
// Load the posts related to a given blog
// using a string to specify the relationship
context.Entry(blog).Collection("Posts").Load();
}
Of course, Find
returns immediately without making a request to the store, if that entity is already loaded by the context.