您可以要麼擴展您的命令類的構造函數接受導航性能表現,包括:
private string _userName;
private MyContext _context;
private Expression<Func<User, object>>[] _includes;
public FetchUserByUsernameServiceCommand(string userName,
MyContext context, params Expression<Func<User, object>>[] includes)
{
_userName = userName;
_context = context;
_includes = includes;
}
public User Execute()
{
IQueryable<User> query = _context.Users;
if (_includes != null)
{
foreach (var include in _includes)
query = query.Include(include);
}
return query.SingleOrDefault(u => u.UserName);
}
你會調用這個像這樣:
User user = new FetchUserByUsernameServiceCommand(
Username, Context, u => u.JoinedGroups.Select(g => g.Image))
.Execute();
var groupList = user.JoinedGroups.ToList();
return groupList;
或者你可以使用顯式加載:
User user = new FetchUserByUsernameServiceCommand(
Username, Context)
.Execute();
var groupList = Context.Entry(user).Collection(u => u.JoinedGroups).Query()
.Include(g => g.Image)
.ToList();
return groupList;
請注意,只有在第一個選項是在這個意義上急切裝載該用戶加基加上圖像被一起加載在單個數據庫請求。第二個選項(顯式加載)將運行兩個數據庫查詢 - 只加載在命令執行和加載組以及圖像該用戶的第二個中的User
對象的第一個。
你可以把代碼段爲貴「集團」的模式? – Sampath