Службы RIA: перечисление удаленных объектов - PullRequest
1 голос
/ 01 марта 2011

Мой класс контекста службы RIA имеет набор сущностей TaskToOperationAssociations, который содержит список ассоциаций «Задача - Операция».

Есть ли способ "найти" объект ассоциации, который был удален из коллекции? Я вижу, что контекст имеет ссылку на удаленную ассоциацию в своих закрытых полях (очевидно, он должен отслеживать ее, чтобы можно было отправить операцию удаления).

Вот пример ...

Если у меня есть задача «A» (с Id = T1), которая связана с операциями X, Y и Z (с идентификаторами O1, O2 и O3), а задача B (с Id = T2) связана с теми же операциями тогда коллекция будет содержать 3 TaskToOperationAssociations следующим образом ...

  1. Ассоциация A1, TaskId = T1, OperationID = 1
  2. Ассоциация A2, TaskId = T1, OperationID = 2
  3. Ассоциация A3, TaskId = T1, OperationID = 3
  4. Ассоциация A4, TaskId = T2, OperationID = 1
  5. Ассоциация A5, TaskId = T2, OperationID = 2
  6. Ассоциация A6, TaskId = T2, OperationID = 3

Я удаляю ассоциацию A1 и ловлю событие изменения свойства TaskToOperationAssociations. В обработчике событий я хочу узнать, изменились ли какие-либо связи для Задачи T1, чтобы я мог включить кнопку сохранения в пользовательском интерфейсе.

Надеюсь, это имеет смысл. Спасибо Бен

Ответы [ 3 ]

1 голос
/ 17 мая 2011

Может быть, это может помочь вам

var deleted = Context.EntityContainer.GetChanges().RemovedEntities
    .Where(re => re is TaskToOperationAssociations && ((TaskToOperationAssociations)re.GetOriginal()).TaskId == T1.Id)
    .Select(re => (TaskToOperationAssociations)re);

или просто

var hasDeleted = Context.EntityContainer.GetChanges().RemovedEntities
    .Any(re => re is TaskToOperationAssociations && ((TaskToOperationAssociations)re.GetOriginal()).TaskId == T1.Id)

, чтобы узнать, есть ли какие-либо удаленные ассоциации для T1

с

foreach (var assoc in deleted)
{
   Context.TaskToOperationAssociations.Add(assoc);
   ((IRevertibleChangeTracking)assoc).RejectChanges();
   ((IRevertibleChangeTracking)T1).RejectChanges();
}

вы можете полностью отменить удаление (если вы еще не зафиксировали свои изменения)

1 голос
/ 08 марта 2011

Вы можете перечислить ChangeSet, ChangeSet будет содержать все, прежде чем он был отправлен.На стороне сервера вы можете перехватывать OnSaveChanges, а также перечислять ChangeSet.

Для существующих изменений ассоциации, в основном набор изменений содержит изменение внешнего ключа.Контейнер сущностей вашего текущего контекста будет содержать наборы изменений, которые еще не отправлены.

0 голосов
/ 12 мая 2011

Нет способа сделать это, используя только контекст. Я исправил это, обернув контекст и отслеживая удаления вручную.

...