прошу прощения за стилистикуЭто не стилистика. Это хуже:
Помогите, кто может!Да уж... Начало не настраивает на позитив.
- Transaction tr лишний, его можно получить из db.Ну, кстати, на мой взгляд, иногда передача ссылки на транзакцию имеет смысл - чтобы не плодить вложенных транзакций. Я нередко пользуюсь таким приемом.
Ну, кстати, на мой взгляд, иногда передача ссылки на транзакцию имеет смысл - чтобы не плодить вложенных транзакций. Я нередко пользуюсь таким приемом.Зависит от контекста использования. Если ты в цикле перебираешь все объекты базы данных чертежа, то это будет целесообразным. Случай автора мне не напоминает данную ситуацию. чтобы не плодить вложенных транзакций он мог бы, как вариант, воспользоваться OpenCloseTransaction. Порой я тоже передаю ссылку на Transaction, например если использую лямбда-выражения в цикле, который может оказаться большим, но в случае обозначенном автором мне видится это излишним.
- Вместо BlockReference br лучше\надёжней\безопасней передавать его ObjectId.Это спорные утверждения...
- Transaction tr лишний, его можно получить из db.
Ну, кстати, на мой взгляд, иногда передача ссылки на транзакцию имеет смысл - чтобы не плодить вложенных транзакций. Я нередко пользуюсь таким приемом.А Database.TransactionManager.TopTransaction тебя не устроит для этой цели?
Вместо BlockReference br лучше\надёжней\безопасней передавать его ObjectId.А по первому, я в прошлом не раз сталкивался с тем, что в переменную передавалась ссылка на объект, который к тому времени уже прекращал своё существование в виду того, что точка выполнения кода уже покинула блок using транзакции, в рамках которой этот объект был создан. Как следствие возникали всякие Fatal Error и прочие прелести.
- Transaction tr лишний, его можно получить из db.
Это спорные утверждения...
з.ы. по второму уже без меня разобрались
Отсюда вывод: зачастую надёжней\безопасней оперировать ObjectId и получать его объект по необходимости.+100. Для .NET это достаточно актуально.
А Database.TransactionManager.TopTransaction тебя не устроит для этой цели?Не всегда. Порой нужно откатывать лишь некоторые изменения, в то же время сохраняя другие.
А Database.TransactionManager.TopTransaction тебя не устроит для этой цели?Если одновременно с двумя документами - то не всегда (иногда проще передать транзакцию чем ее DB).
Чем выше уровень абстракции и чем меньше зависимостей в коде - тем лучше.Андрей - тебе пора переходить на функциональные языки - там с абстракциями все в порядке.
Андрей - тебе пора переходить на функциональные языки - там с абстракциями все в порядке.Почитываю\пробую Haskell.
Если одновременно с двумя документами - то не всегда (иногда проще передать транзакцию чем ее DB).Не понял о чем это ты, если у каждого документа свой TransactionManager и соответственно своя TopTransaction.
Не всегда. Порой нужно откатывать лишь некоторые изменения, в то же время сохраняя другие.Не смеши меня. Сколько раз во всех своих программах ты используешь откат транзакции? И помнишь ли ты, что откат транзакции значительно длительнее чем её Commit.
А по первому, я в прошлом не раз сталкивался с тем, что в переменную передавалась ссылка на объект, который к тому времени уже прекращал своё существование в виду того, что точка выполнения кода уже покинула блок using транзакцииСогласен, я уж подзабыл - просто в F# надо специально сильно постараться чтоб так получилось - т.к. там переменных по умолчанию нет - и посему проблемы такой тоже (надо либо создавать переменную, либо вручную dispos'ировать транзакцию).
Сколько раз во всех своих программах ты используешь откат транзакции?Честно говоря, так сходу и не вспомню где и когда. Соответственно, если и использовал, то очень редко. :)
И помнишь ли ты, что откат транзакции значительно длительнее чем её Commit.Конечно помню. Потому и дёргаю Commit даже когда выполнял только лишь чтение.
А Database.TransactionManager.TopTransaction тебя не устроит для этой цели?Мне почему-то хочется иметь ссылку именно на ту транзакцию, в которой получен передаваемый объект. Она же тоже может быть вложенной. Она также может быть OpenCloseTransaction, выдаст ли Database.TransactionManager.TopTransaction ссылку на нее? Я не знаю, надо экспериментировать...
Мне почему-то хочется иметь ссылку именно на ту транзакцию, в которой получен передаваемый объект. Она же тоже может быть вложенной.Используя TopTransaction можно спокойно обойтись без вложенных транзакций. Но здесь есть подводный камень: а что, если TopTransaction не существует? Мало ли из какого кода вызван твой метод. Не исключено, что программист, вызывает твой метод не из контекста транзакции. В этом случае нужно либо документировать это требование, либо выполнять проверку существования транзакции. Т.е. может возникнуть потребность в том, чтобы проверять TopTransaction на null и если получаем "бинго!!!", то формировать соответствующий блоко using. На мой взгляд, в подобных случаях использование TopTransaction создаёт дополнительную нежелательную(???) зависимость (зависимость от контекста). В то же время, если твой метод внутренний и ты сам полностью контролируешь где и как он вызывается, то использовать TopTransaction, на мой взгляд, приемлемо.
Она также может быть OpenCloseTransaction, выдаст ли Database.TransactionManager.TopTransaction ссылку на нее? Я не знаю, надо экспериментировать...OpenCloseTransaction наследуется от Transaction. Поскольку путём введения в API класса OpenCloseTransaction Autodesk тем самым постарался сделать единообразной работу как в транзакции, так и в её эмуляции, то вполне логично ожидать, что в обозначенной тобой ситуации будет возвращена ссылка на экземпляр OpenCloseTransaction.