Модификация объекта после сохранения в БД

Автор Тема: Модификация объекта после сохранения в БД  (Прочитано 9438 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 168
    • Мои плагины к Автокаду
Такая проблемка:
- Создаю клон солида.
- Сохраняю в модель (space.AppendEntity и tr.AddNewlyCreatedDBObject).
- Анализирую Brep (для этого и сохраняю, без сохранения нет доступа к SubentityId)
- Переношу объект в другое место через TransformBy.
- Коммит транзакции.
В результате солид отрисован в старом месте чертежа, без переноса. При его выборе он сам выделяется в старом месте, а ручки рисуются в новом. При масштабировании мышью видно, что солид временами обрисовывается в старом месте, временами в новом. Editor.Regen не помогает. _Regen из командной строки помогает через раз.
Что за хрень и как лечить?

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Алесканд предупреждал, что метод Entity.Clone() может некорректно работать для некоторых объектов. Наверно солид один из них. 
Может попробовать Deep сlone?
Или методы копирования объекта, а не клонирования.

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 168
    • Мои плагины к Автокаду
Попробовал DeepClone. Все то же самое. Проблема не в том откуда взялся солид, а в том что мне его приходится менять после сохранения в БД, но до коммита транзакции. Придет наверно делить транзакцию на две, хотя очень не хотелось.

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 168
    • Мои плагины к Автокаду
Попробовал на две транзакции разделить. Теперь все работает. Но куууча лишнего кода, лишняя транзакция, повторное открытие солида, повторные развороты, повторное создание клона... грустно.
Получается запись в модель и в транзакцию (а может что-то одно из этого) должна быть обязательно последним действием перед применением транзакции.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробовал на две транзакции разделить. Теперь все работает. Но куууча лишнего кода, лишняя транзакция, повторное открытие солида, повторные развороты, повторное создание клона... грустно.
Эмуляцию транзакции не пробовал?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 168
    • Мои плагины к Автокаду
Эмуляцию транзакции не пробовал?
А что это такое?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Эмуляцию транзакции не пробовал?
А что это такое?
Позор! :) StartOpenCloseTransaction вместо OpenTransaction. Или вообще .Open и .Close
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 168
    • Мои плагины к Автокаду
Ой, а этот метод называется эмуляцией?? Ок, буду знать. Надо пробовать, но пока нет опыта использования всех этих опасных методов.