2014-10-19 44 views
0

我有兩個實體,一個是Users,另一個是UserProfile,都具有一對一的關係。我正在訪問使用Find()方法DataContext等。導航屬性爲null通過實體框架中的DataContext的查找方法

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

但每次我一得到UserProfilenull。請幫忙 !

+0

花了一些時間我發現,我使用兩個實體一對一的關係之後。要獲得導航屬性數據加載到基礎實體上,我需要定義它的虛擬屬性。在UserProfile屬性在用戶實體中定義一個虛擬屬性後,我能夠導航屬性數據。 – 2014-10-19 05:37:00

回答

2

您不能通過Find方法加載相關實體。而你想獲得相關的實體,你可以明確地加載它。

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

或使用SingleOrDefault|FirstOrdefaultInclude方法。

和通用的方式來加載導航屬性

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))); 
} 
+0

有什麼通用的方法可以將導航屬性數據添加到許多實體中,就像我們可以按照我的問題示例的通用方式在Post中添加博客數據一樣? – 2014-10-19 05:24:56