I have this SQL query:
SELECT
t.ServerId, t.Id, s.Name
FROM
MyTable as t
JOIN
Server s ON t.ServerId = S.Id
I'm running it with:
context.Database.SqlQuery<entity>("query_goes_here");
How can I configure EF so that it loads the Server
property of my entity with the return data from the query?
Based on the answer by @octavioccl, I ended up doing this:
foreach(var result in results)
{
context.Attach(result);
context.Entry(result).Reference(p => p.Server).Load();
}
But I'm afraid this is making a lot of db trips?
Use the
DbSet.SqlQuery
method for queries that return entity types. The returned objects must be of the type expected by theDbSet
object, and they are automatically tracked by the database context unless you turn tracking off.After execute your query, you should be able of get the
Server
through yourentity
instance via lazy loading:On the other hand, the returned data by the
Database.SqlQuery
isn't tracked by the database context, even if you use this method to retrieve entity types. If you want to track the entities that you get after execute your query using this method, you can try this:If you have disabled lazy loading you can load explicitly your navigation property using the
DbEntityEntry.Reference()
method:You can load all the rows for your navigation property first then load your main entity. Apply a filter on it first if you wish.
or using SqlQuery
then query MyTable and EF will link the two together for you