您不能通過Find
方法加載相關實體。而你想獲得相關的實體,你可以明確地加載它。
var post = context.Posts.Find(2);
context.Entry(post).Reference(p => p.Blog).Load();
或使用SingleOrDefault|FirstOrdefault
與Include
方法。
和通用的方式來加載導航屬性
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)));
}
花了一些時間我發現,我使用兩個實體一對一的關係之後。要獲得導航屬性數據加載到基礎實體上,我需要定義它的虛擬屬性。在UserProfile屬性在用戶實體中定義一個虛擬屬性後,我能夠導航屬性數據。 – 2014-10-19 05:37:00