(完全限定類名: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接口,都符合上述的原則,是以在使用這些通路器的時候,要注意事務型通路器對象與非事務型通路器對象的差別。