ADO.Net EF отслеживание при удалении
От: detox Россия  
Дата: 31.10.11 16:33
Оценка:
Есть модель, в которой два объекта
Order и Report. Order может содержать Reports.

Добавляем Order в модель:
                Order order = new Order()
                {
                    Name = "Test"
                };

                Report report = new Report()
                {
                    Name = "Test"
                };

                order.Reports.Add(report);

                context.Orders.AddObject(order);

                var insertEntry = context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added);

Все отлично. Имеем два добавленных объекта.

Пытаемся удалить объект Order из модели

                var order = context.Orders.FirstOrDefault();
                
                context.DeleteObject(order);

                var deleteEntry = context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted);

Имеем один удаленный объект, а не два.

Как отследить какие Report были удалены?
Re: ADO.Net EF отслеживание при удалении
От: WadeOne  
Дата: 31.10.11 21:19
Оценка:
Здравствуйте, detox, Вы писали:

D>Есть модель, в которой два объекта

D>Order и Report. Order может содержать Reports.
D>
D>Добавляем Order в модель:
D>
D>                Order order = new Order()
D>                {
D>                    Name = "Test"
D>                };

D>                Report report = new Report()
D>                {
D>                    Name = "Test"
D>                };

D>                order.Reports.Add(report);

D>                context.Orders.AddObject(order);

D>                var insertEntry = context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added);
D>

D>Все отлично. Имеем два добавленных объекта.

D>Пытаемся удалить объект Order из модели


D>
D>                var order = context.Orders.FirstOrDefault();
                
D>                context.DeleteObject(order);

D>                var deleteEntry = context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted);    
D>

D>Имеем один удаленный объект, а не два.

D>Как отследить какие Report были удалены?


а в БД выставлено каскадное удаление? если нет, то стоило бы включить
Re[2]: ADO.Net EF отслеживание при удалении
От: detox Россия  
Дата: 01.11.11 06:07
Оценка:
Здравствуйте, WadeOne, Вы писали:

WO>а в БД выставлено каскадное удаление? если нет, то стоило бы включить


Какскадно удаление в БД включено.
Проблема не в том, что Report не удаляются, он то как раз удаляются с этим все OK.
Проблема в том, что я не могу отслеживать это удаление, т.е. объект context.ObjectStateManager не содержит информации о том, что он удаляет эти объекты.
Re[3]: ADO.Net EF отслеживание при удалении
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.11.11 07:51
Оценка: 3 (1)
Здравствуйте, detox, Вы писали:

D>Проблема в том, что я не могу отслеживать это удаление, т.е. объект context.ObjectStateManager не содержит информации о том, что он удаляет эти объекты.


Дык, это же ОРМ! Ты думаешь он внедряется в БД, знаком с его структурой и отслеживает все события в СУБД? Фиг там. Это обман зрения. Не более того.

Привыкай работать с этой фигней с пониманием того, что ОРМ работает не более чем с кешем.

Почему при работе с SQL таких проблем нет? Да потому что выполняют запросы. Надо удалить данные? Выполняем запрос на удаление. Надо узнать текущее состояние? Выполняем запрос на получение данных.

При использовании ОРМ-ом делать нужно все точно так же, а не полагаться на их интеллектуальность.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.