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接口,都符合上述的原则,所以在使用这些访问器的时候,要注意事务型访问器对象与非事务型访问器对象的区别。
返回到:轻量的数据访问框架 --序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)-- 功能插件处理器工厂