(изменено: Валерий Осипов, 3 мая 2013г. 15:31:24)

Тема: Изменение объекта вне транзакции.

Добрый день. Хочу прояснить для себя одну вещь.

Я правильно понимаю, что при получении объекта из транзакции создается его копия, изменения из которой при выполнении transaction.Commit() записываются в базу, после чего никакой связи с базой не остается?

public Xrecord GetObjectUsingTr(ObjectId recordId)
{
    using (var tr = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction())
    {
        var xrec = tr.GetObject(recordId, OpenMode.ForRead) as Xrecord;
        return xrec;
        tr.Commit();
    }
}

public void ChangeObject(Xrecord xrec)
{
    // что-то меняем в xrec
    // оно не сохранится?
}

И чтобы в функции ChangeObject менялся объект, нужно снова открывать транзакцию, получать объект из базы и коммитить эту новую транзакцию? Есть ли более простой способ изменения объектов, полученных из транзации в другой функции?

(изменено: Hwd, 3 мая 2013г. 18:36:41)

Re: Изменение объекта вне транзакции.

// оно не сохранится?

Не сохранится, если  выполнялось не в рамках применённой транзакции. После того, как ты выполняешь применение или отмену транзакции, она закрывается и попытка повторного использования объекта Transaction приведёт к возникновению Fatal Error.

Есть ли более простой способ изменения объектов, полученных из транзации в другой функции?

А ты не объекты в таких случаях используй, а идентификаторы, либо получай объекты без помощи транзакции.
По поводу транзакций можешь глянуть здесь.

Re: Изменение объекта вне транзакции.

Валерий Осипов пишет:

Есть ли более простой способ изменения объектов, полученных из транзации в другой функции?

попробуй TransactionManager.TopTransaction
если находишься в том же документе
Подробнее:
http://spiderinnet1.typepad.com/blog/20 … means.html