DataRabbit 轻量的数据访问框架(01) -- ITransactionAccesser
(完全限定类名:DataRabbit.ITransactionAccesser)
在DataRabbit 轻量的数据访问框架 --序 中,我们已经知道,所有的访问器接口都继承了ITransactionAccesser接口。ITransactionAccesser的含义在于:访问器对象即可以工作于一个事务(Transaction)上下文中,也可以在脱离事务的环境中工作。
如果访问器对象在事务上下文中工作,则该访问器对象就是有状态的,并且该访问器对象的生命期将随着事务的结束而结束,也就是说,当关联的事务结束后,就不能再使用这个访问器对象了。
如果访问器对象工作于非事务环境,则该访问器对象就是无状态的,可以以Sinleton的模式来使用这个访问器对象,也就是说,只需要一个这样的访问器对象,就可以在任何时间任何地点来通过它对数据库进行非事务方式的访问。如从TransactionScope获取OrmAccesser:
如果TransactionScope实例是基于事务的,则TransactionScope.NewOrmAccesser()方法总是创建一个新的事务型访问器对象返回,当作为参数的事务结束时,返回的访问器对象的生命期也就结束了。
无论是ORM访问器、还是Relation访问器等等,只要继承了ITransactionAccesser接口,都符合上述的原则,所以在使用这些访问器的时候,要注意事务型访问器对象与非事务型访问器对象的区别。
返回到:轻量的数据访问框架 --序
在DataRabbit 轻量的数据访问框架 --序 中,我们已经知道,所有的访问器接口都继承了ITransactionAccesser接口。ITransactionAccesser的含义在于:访问器对象即可以工作于一个事务(Transaction)上下文中,也可以在脱离事务的环境中工作。
public interface ITransactionAccesser
{
/// <summary>
/// InTransaction 访问器是否处于一个事务中。
/// </summary>
bool InTransaction { get; }
}
{
/// <summary>
/// InTransaction 访问器是否处于一个事务中。
/// </summary>
bool InTransaction { get; }
}
如果访问器对象在事务上下文中工作,则该访问器对象就是有状态的,并且该访问器对象的生命期将随着事务的结束而结束,也就是说,当关联的事务结束后,就不能再使用这个访问器对象了。
如果访问器对象工作于非事务环境,则该访问器对象就是无状态的,可以以Sinleton的模式来使用这个访问器对象,也就是说,只需要一个这样的访问器对象,就可以在任何时间任何地点来通过它对数据库进行非事务方式的访问。如从TransactionScope获取OrmAccesser:
/// <summary>
/// GetOrmAccesser 获取访问目标表的ORM访问器。
/// </summary>
IOrmAccesser<EntityType> NewOrmAccesser<EntityType>();
如果当前的TransactionScope实例是基于事务的,则该方法将返回基于事务的ORM访问器。同理,如果当前的TransactionScope实例不是基于事务的,则该方法将返回非事务型的ORM访问器。DataRabbit在实现时,将缓存非事务型的访问器对象,因为非事务型的访问器对象是无状态的,所以可以以Singleton模式来使用。也就是说,如果我们多次使用非事务的TransactionScope实例来调用TransactionScope.NewOrmAccesser()方法,那么多次调用得到的结果都将是同一个非事务型的ORM访问器。/// GetOrmAccesser 获取访问目标表的ORM访问器。
/// </summary>
IOrmAccesser<EntityType> NewOrmAccesser<EntityType>();
如果TransactionScope实例是基于事务的,则TransactionScope.NewOrmAccesser()方法总是创建一个新的事务型访问器对象返回,当作为参数的事务结束时,返回的访问器对象的生命期也就结束了。
无论是ORM访问器、还是Relation访问器等等,只要继承了ITransactionAccesser接口,都符合上述的原则,所以在使用这些访问器的时候,要注意事务型访问器对象与非事务型访问器对象的区别。
返回到:轻量的数据访问框架 --序