DataRabbit 轻量的数据访问框架(01) -- ITransactionAccesser

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

   在DataRabbit 轻量的数据访问框架 --序 中,我们已经知道,所有的访问器接口都继承了ITransactionAccesser接口。ITransactionAccesser的含义在于:访问器对象即可以工作于一个事务(Transaction)上下文中,也可以在脱离事务的环境中工作。
    public interface ITransactionAccesser
    {
        
/// <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访问器。
   如果TransactionScope实例是基于事务的,则TransactionScope.NewOrmAccesser()方法总是创建一个新的事务型访问器对象返回,当作为参数的事务结束时,返回的访问器对象的生命期也就结束了。
   无论是ORM访问器、还是Relation访问器等等,只要继承了ITransactionAccesser接口,都符合上述的原则,所以在使用这些访问器的时候,要注意事务型访问器对象与非事务型访问器对象的区别。


返回到:轻量的数据访问框架 --序   
posted @   zhuweisky  阅读(4041)  评论(5编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2006-03-20 ESFramework介绍之(13)-- 功能插件处理器工厂
点击右上角即可分享
微信分享提示