Прежде всего, извините за плохой заголовок, я могу только описать проблему
Допустим, в базе данных на сервере есть таблица / тип с именем Tasks.
и эти задачи могут принадлежать пользователю и назначаться пользователю.
SomeTask.Owner = SomeUser
SomeTask.Assignee = SomeOtherUser
На сервере определены некоторые дополнительные запросы:
public IQueryable<Task> GetAssignedTasks(int UserId) { /* gets the assigned tasks */ };
public IQueryable<Task> GetOwnedTasks(int UserId) { /* gets the owned tasks */ };
В ViewModel они могут быть загружены следующим образом:
var ownedTasksQuery = context.GetOwnedTasksQuery(userId);
context.Load(ownedTasksQuery);
var assignedTasksQuery = context.GetAssignedTasksQuery(userId);
context.Load(assignedTasksQuery);
Проблема здесь в том, что оба результата загружаются в контекст,
т.е. context.Tasks содержит объединение результатов обоих запросов
Моей первой мыслью было просто изменить геттер для свойств в моей VieWModel:
public IEnumerable<Task> OwnedTasks
{
get { return context.Tasks.Where(t => t.UserId == userId); }
}
public IEnumerable<Task> AssignedTasks
{
get { return context.Tasks.Where(t => t.UserId == userId); }
}
Однако, когда я связываю представление с этими свойствами, ничего не возвращается,
тогда как если я буду использовать следующее, все загруженные записи будут возвращены (очевидно):
public IEnumerable<Task> OwnedTasks
{
get { return context.Tasks; }
}
public IEnumerable<Task> AssignedTasks
{
get { return context.Tasks; }
}
Полагаю, я поступаю совершенно неправильно,
Как правильно справиться с такой ситуацией?
Обновление: или я должен просто обработать это, создав другой экземпляр контекста?
Обновление: похоже, я поступил неправильно ...
Я все еще думаю о классификации запросов к базе данных ...
Все, что мне нужно сделать, чтобы решить мою проблему, это загрузить Пользователя, включая назначенные и собственные задачи ...
ObjectContext.Users.Include("OwnedTasks").Include("AssignedTasks")
Сделает это сообщество вики, если кто-то другой сделает то же самое.