отклонить конкретный удаленный элемент из DomainContext

Я использую 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.

Спасибо,


person Azi    schedule 16.07.2010    source источник
comment
Добро пожаловать в SO, пожалуйста, найдите несколько минут, чтобы прочитать FAQ и документацию Markdown (полезный синопсис которого доступен в правом поле при редактировании вопроса).   -  person AnthonyWJones    schedule 16.07.2010


Ответы (1)


Немного поискав, я нашел, где Колин Блэр говорит:

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

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

person Alyce    schedule 10.12.2012