Sandeep Shekhawat
Sandeep Shekhawat

Reputation: 695

Navigation Property is null by Find method of DataContext in Entity Framework

I have two entities one is Users and another is UserProfile, both have one to one relationship. I am accessing using Find() method of DataContext such as.

public T GetById(object id)
{
   return this.Entities.Find(id);
}

But each time I an getting UserProfile null. Please help !

Upvotes: 1

Views: 1244

Answers (1)

Mohsen Esmailpour
Mohsen Esmailpour

Reputation: 11554

You cannot load related entities by Find method. while you want get related entities you could explicitly load it.

var post = context.Posts.Find(2); 
context.Entry(post).Reference(p => p.Blog).Load();

Or use SingleOrDefault|FirstOrdefault with Include method.

And generic way to load navigation property

public TEntity GetItem(Expression<Func<TEntity, bool>> predicate, params Expression<Func<TEntity, object>>[] includeProperties)
{
    var query = context.EntitySet<TEntity>().AsQueryable();
    if (includeProperties != null)
        query = ApplyIncludesOnQuery(query, includeProperties);

    return query.SingleOrDefault(predicate);
}

internal static IQueryable<TEntity> ApplyIncludesOnQuery(IQueryable<TEntity> query, params Expression<Func<TEntity, object>>[] includeProperties)
{
    // Return Applied Includes query
    return (includeProperties.Aggregate(query, (current, include) => current.Include(include)));
}

Upvotes: 2

Related Questions