отклонить определенный удаленный элемент из DomainContext - PullRequest
2 голосов
/ 16 июля 2010

Я использую Silverlight4 и Ria Service:

Представляем, что у нас есть таблица (называемая «MyTable») с 3 записями (1, 2, 3), я только что написал следующие коды где-то вмое приложение:

CurrentItem  = 1;
MyContext.MyTables.Delete(CurrentItem);
CurrentItem  = 2;
MyContext.MyTables.Delete(CurrentItem);

По некоторым причинам, прежде чем нажать кнопку «Сохранить», я хочу отклонить первый удаленный элемент (1), но все еще хочу удалить второй (2). Это означает, чтоЯ не могу использовать:

MyContext.RejectChanges()  

Потому что он отклонит все изменения (включая удаленный элемент, который я хочу удалить), поэтому я, используя IRevertibleChangeTracking, могу решить мою проблему. Что-то вроде этого:

((IRevertibleChangeTracking) MyItem).RejectChanges();

Но прежде чем использовать этот интерфейс, я должен получить доступ к удаленному элементу.Сначала он пытался получить его через MyContext.MyTables, но он не содержит удаленных записей, поэтому я попытался получить его с помощью EntityChangeSet:

EntityChangeSet Changes =  MyContext.EntityContainer.GetChanges();
MyTable  DeletedItem  = Changes.First<MyTables>( e => e.ID = 1 ) ;

А затем я использовал IRevertibleChangeTracking:

((IRevertibleChangeTracking) DeletedItem  ).RejectChanges();

Но после выполнения, эта строка кода не изменила состояние записи и была сохранена как «Удаленная», поэтому, нажав кнопку «Сохранить», она была физически удалена из базы данных !!!!Кажется, IRevertibleChangeTracking не работает для удаленных / добавленных элементов (он работает только для измененных элементов).

Итак, есть ли способ отклонить определенный удаленный элемент из DomainContext.

Спасибо,

1 Ответ

0 голосов
/ 10 декабря 2012

После еще большей охоты я нашел, где Колин Блэр говорит:

Каждый объект RIA Services реализует интерфейс IRevertibleChangeTracking.Все, что вам нужно сделать, это привести вашу сущность к IRevertibleChangeTracking и вызвать RejectChanges.RejectChanges не работает для новых или удаленных сущностей.

Вместо того, чтобы удалять каждую сущность, можете ли вы установить для логического свойства значение false, а после завершения удалить сущности с флагом, установленным в false?

...