doc.TransactionManager or db.TransactionManager

doc.TransactionManager or db.TransactionManager

Dale.Bartlett
Collaborator Collaborator
1,377 Views
1 Reply
Message 1 of 2

doc.TransactionManager or db.TransactionManager

Dale.Bartlett
Collaborator
Collaborator

Dumb question: What is the difference? When to use one or the other? I've made the usual investigation and found these very good articles:

http://spiderinnet1.typepad.com/blog/2012/04/database-transactionmanager-and-document-transactionman...

http://spiderinnet1.typepad.com/blog/2012/05/document-transactionmanager-is-nowhere-for-external-dat... 

Can anyone add some additional insight? It appears that db.TransactionManager will serve in all situations. Thanks, Dale




______________
Yes, I'm Satoshi.
0 Likes
Accepted solutions (1)
1,378 Views
1 Reply
Reply (1)
Message 2 of 2

jeff
Collaborator
Collaborator
Accepted solution

Loooking at it quickly in reflector it inherits from TransactionManager and looks like it just adds the functionality to flush graphics

 

[Wrapper("AcTransactionManager")]
public sealed class TransactionManager : TransactionManager
{
    // Methods
    internal TransactionManager(IntPtr unmanagedObject, [MarshalAs(UnmanagedType.U1)] bool bAutoDelete);
    protected sealed override void DeleteUnmanagedObject();
    public void EnableGraphicsFlush([MarshalAs(UnmanagedType.U1)] bool doEnable);
    public void FlushGraphics();
    internal unsafe AcTransactionManager* GetImpObj();
    public sealed override Transaction StartTransaction();

    // Properties
    public override Transaction TopTransaction { get; }
}

 

 

 It uses a AppTransaction that inherits from Transaction looks it just overrides Commit() and uses base functionality then flushes the graphics.

 

internal sealed class AppTransaction : Transaction
{
    // Fields
    private TransactionManager m_mgr;

    // Methods
    protected internal AppTransaction(IntPtr unmanagedPointer, [MarshalAs(UnmanagedType.U1)] bool autoDelete, TransactionManager mgr) : base(unmanagedPointer, autoDelete)
    {
        this.m_mgr = mgr;
    }

    public sealed override void Commit()
    {
        base.Commit();
        ((TransactionManager) this.TransactionManager).FlushGraphics();
    }

    // Properties
    public override TransactionManager TransactionManager
    {
        get
        {
            return this.m_mgr;
        }
    }
}

 

 

So looks like if want to call FlushGraphics for each commit then use the Document TransactionManager.

 

Now that I say that seems like I just saw Tony mention to use the Documents Transmamnger when it came to regenerating graphics or something similar. 

 

You can also find your answers @ TheSwamp