天天看點

DataRabbit 輕量的資料通路架構(01) -- ITransactionAccesser

   (完全限定類名:DataRabbit.ITransactionAccesser)

    public interface ITransactionAccesser

    {

        /// <summary>

        /// InTransaction 通路器是否處于一個事務中。

        /// </summary>

        bool InTransaction { get; }

    }

   如果通路器對象在事務上下文中工作,則該通路器對象就是有狀态的,并且該通路器對象的生命期将随着事務的結束而結束,也就是說,當關聯的事務結束後,就不能再使用這個通路器對象了。   

        /// GetOrmAccesser 擷取通路目标表的ORM通路器。       

        /// </summary> 

        IOrmAccesser<EntityType> NewOrmAccesser<EntityType>();

   如果目前的TransactionScope執行個體是基于事務的,則該方法将傳回基于事務的ORM通路器。同理,如果目前的TransactionScope執行個體不是基于事務的,則該方法将傳回非事務型的ORM通路器。DataRabbit在實作時,将緩存非事務型的通路器對象,因為非事務型的通路器對象是無狀态的,是以可以以Singleton模式來使用。也就是說,如果我們多次使用非事務的TransactionScope執行個體來調用TransactionScope.NewOrmAccesser()方法,那麼多次調用得到的結果都将是同一個非事務型的ORM通路器。

   如果TransactionScope執行個體是基于事務的,則TransactionScope.NewOrmAccesser()方法總是建立一個新的事務型通路器對象傳回,當作為參數的事務結束時,傳回的通路器對象的生命期也就結束了。

   無論是ORM通路器、還是Relation通路器等等,隻要繼承了ITransactionAccesser接口,都符合上述的原則,是以在使用這些通路器的時候,要注意事務型通路器對象與非事務型通路器對象的差別。