NHibernate中使用事务

树莓派4B部署Ollama+Qwen+VOSK+QT:打造离线AI语音助手 边缘计算正在把AI能力从云端下沉到终端设备,而语音交互则是其中最具代表性的应用之一。在资源受限的硬件上实现完整的语音对话链路,需要解决模型推理、语音识别、界面交互等多个环节的协同问题。树莓派4B作为典型的ARM平台,通过Ollama工具可高效部署Qwen 0.5B这样的小参数大模型,实现本地化文本生成;配合VOSK离线语音识别技术,将麦克风采集的音频实时转换为文字;再借助QT(PySide6)构建图形界面,整合录音、识别、回答与语音合成流程,即可打造一台完全离线的AI语音助手。这套方案不依赖云端,有效保护隐 阅读详情
通过它可以提交或者回滚操作
1.实际上在NHibernate使用事务要使用using强制资源清理和异常机制,一般像这样:
using (ITransaction tx = _session.BeginTransaction())
{
    try
    {
        //一些保存、更新、删除等操作
        tx.Commit();
    }
    catch (HibernateException)
    {
        tx.Rollback();
        throw;
    }
}

2.什么时候使用事务?

回答是:在任何时候都要使用事务,即使是在读取、查询数据的时候,为什么呢?

因为你不清楚数据库什么时候操作失败,如何恢复原来数据。

而NHibernate中的事务(可以通过 tx.Rollback()方法),帮助我们完成这些事情。

 

写一个测试用例,假设这个测试可以运行成功:

[Test]
public void CreateCustomerTransactionTest()
{
    var customer = new Customer() { Firstname = "YJing", Lastname = "Lee" };
    int newIdentity = _transaction.CreateCustomerTransaction(customer);
    var testCustomer = _transaction.GetCustomerById(newIdentity);
    Assert.IsNotNull(testCustomer);
}
 

测试这个方法,使用TestDriven.NET集成的NCover(分析代码的覆盖率)查看代码运行覆盖率,

在这个测试方法上右击选择“Test With”—“Coverage”,如下图所示:

使用Coverage测试

这时自动打开NCoverExplorer(查看代码覆盖率的分析结果),我们可以看到CreateCustomerTransaction方法运行覆盖情况,

我们发现这个方法通过事务成功提交了操作并返回新的Id。分析结果效果图如下所示:

成功提交代码覆盖率分析结果

【测试失败回滚】

我们在写一个失败回滚的测试,由于我认为设置了一个“将截断字符串或二进制数据”错误,

这时必须在测试方法上指定测试预期的异常。

[Test]
[ExpectedException(typeof(NHibernate.HibernateException))]
public void CreateCustomerThrowExceptionOnFailTest()
{
    var customer = new Customer()
    {
        Firstname = "012345678901234567890123456789012345678901234567890123456789",
        Lastname = "YJingLee"
    };
    _transaction.CreateCustomerTransaction(customer);
}

同理按上面的步骤测试这个方法看看CreateCustomerTransaction方法运行情况,

由于出现错误(这里是“将截断字符串或二进制数据”错误),所以系统抛出了HibernateException异常,

此时系统发生回滚。分析结果效果图如下所示:

失败回滚代码覆盖率分析结果

2.删除对象

我们修改上例中的删除对象的代码,如下所示:

public void DeleteCustomerTransaction(Customer customer)
{
    using (ITransaction tx = _session.BeginTransaction())
    {
        try
        {
            _session.Delete(customer);
            _session.Flush();
            tx.Commit();
        }
        catch (HibernateException)
        {
            tx.Rollback();
            throw;
        }
    }
}

3.更新对象

我们修改上例中的更新对象的代码,如下所示:

public void UpdateCustomerTransaction(Customer customer)
{
    using (ITransaction tx = _session.BeginTransaction())
    {
        try
        {
            _session.Update(customer);
            _session.Flush();
            tx.Commit();
        }
        catch (HibernateException)
        {
            tx.Rollback();
            throw;
        }
    }
}

4.保存更新对象

我们修改上例中的保存更新对象的代码,如下所示:

public void SaveOrUpdateCustomersTransaction(IList<Customer> customers)
{
    using (ITransaction tx = _session.BeginTransaction())
    {
        try
        {
            foreach (Customer c in customers)
                _session.SaveOrUpdate(c);
            _session.Flush();
            tx.Commit();
        }
        catch (HibernateException)
        {
            tx.Rollback();
            throw;
        }
    }
}

好了,由于篇幅有限,上面三个方法在这里我就不测试了,大家可以参考创建对象测试的步骤来测试一下其他几个方法吧!

结语

感觉这节内容很少的样子,在NHibernate官方文档中对事务讲解的并不多,自己挖空心思也就挤了这么多东西。

不过在这一节带领大家学会了测试工具TestDriven.NET的另一个功能就是怎么查看代码运行覆盖率,

NHibernate事务、并发和缓存 NHibernate事务、并发和缓存! 很值得下载看看!资源免费,大家分享!! 立即下载

相关推荐

Spring.NET实用技巧4——NHibernate分布式事务(下)

Spring.NET实用技巧4——NHibernate分布式事务(下) 博客出处:http://www.cnblogs.com/GoodHelper/archive/2010/07/30/SpringNetDistributedTransaction2.html

Hibernate中的事务

1. 事务的回顾 1.1 什么是事务(Transaction) 是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,sql 能将逻辑相关的一组操作绑定在一起,以便服务器 保持数据的完整性。事务通常是以begin transaction开始,以commit或rollback结束。Commint表示提交,即提交事务的所有操作。具体地说就是将事...

weixin_43343423的博客 1064

NHibernate

NHibernate 初学者学习,,讲解详细,,高清pdf。不辣眼睛

HIbernate中的事务

什么时事务 在数据库操作中,一项事务(Transaction)是由一条或多条操作数据库的SQL语句组成的一个不可分割的工作单元。当事务中的所有操作都正常完成时,整个事务才能被提交到数据库中,如果有一项操作没有完成,则整个事务会被回滚。 其实事务总结起来理解为:逻辑上的一组操作,组成这组操作的各个单元,要么一起成功,要么一起失败。 事务的四个特性 事务由很严格的定义,需要同时满足四个特性,即原子性、...

吴声子夜歌的博客 2105

倍福TwinCAT3 OPC UA配置全流程:从安装到无密码访问(附常见问题解决)

本文提供了倍福TwinCAT3 OPC UA配置的完整实战指南,重点讲解如何实现无密码游客访问。从软件安装、授权配置、服务器初始化到深度排错,详细解析了配置流程中的关键步骤与常见陷阱,帮助工程师高效打通PLC与上位系统的数据通讯通道。

vulkan6gpu的博客 473

人工智能情感分析实战:文本情绪识别

人工智能情感分析,特别是文本情绪识别,已成为理解和处理人类情感信息的重要工具。通过数据预处理、特征提取、模型训练与评估等步骤,我们可以有效地从文本数据中提取情感信息,为各种应用场景提供有价值的洞察。随着技术的不断进步和创新,情感分析的应用前景将更加广阔,为我们的生活和工作带来更多便利和机遇。

shejizuopin的博客 1099

NHibernate创建session操作,以及transaction事务的使用

根据我们之前的配置。用session 然后直接new就可以了,很方便。 Program.cs: using NHibernate; using NHibernate.Cfg; using NHiberToMySQL.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NHiberToMy

麦当劳比肯德基好吃 726

Ubuntu下Charm-Crypto安装

经过一下午的努力终于是把Charm-Crypto给安上了,经过查询资料,大致有三种方案(两坑一可行)。 适用于我的电脑的是Ubuntu 18.04版本。 第一种方案是根据连接https://pypi.org/project/charm-crypto/的教程进行安装,但是该方案的优势在于下载快速,缺陷在于Ubuntu系统仅仅更新到13+版本。 第二种就是网络博客上的介绍,内容与第一种较类似,但是有16+,18+成功的例子,缺点就是bug太多,我大部分时间都耗在了这上边,而且还没有成功。 第三中是github上

Mr.Yi的博客 2285

“将截断字符串或二进制数据。语句已终止……”问题的解决

下面我把这个问题的详情记录下来,这个bug也胸闷了半天,一直拖了几天,做客服工作的MM也找了我很多次谈话,一开口就是“哎呀!又有用户反映不能注册啊……”。为什么我不早些用google能,早些搜索,也就不至于一个人郁闷了。虽然没有找到直接答案,也通过累似的问题,加上自己的不断测试,断定了这是由于数据的长度不符合才造成的,感谢google.感谢自己的不懈努力,终于测试出问题所在了。解决办法当然有多种,...

weixin_30340745的博客 2651

联邦学习代码解读,超详细

联邦学习伪代码 损失函数使用方法 1 optimizer = optim.Adam(model.parameters()) 2 fot epoch in range(num_epoches): 3 train_loss=0 4 for step,(seq, label) in enumerate(data_loader): 5 # 损失函数 6 loss = criterion(model(seq), label.to(device)

weixin_42098322的博客 1万+

RAGFlow 系列教程 第三课:后端服务入口与请求生命周期

本文深入解析RAGFlow v0.25.0后端核心机制,重点介绍了Quart框架选型原因和服务启动流程。RAGFlow选择Quart作为Web框架,主要基于其异步能力对LLM调用的支持、Flask生态兼容性以及长响应超时处理优势。文章详细拆解了服务启动的8个关键步骤,从日志初始化到HTTP服务启动,并分析了配置加载、数据库初始化等核心环节。通过源码分析揭示了RAGFlow如何实现动态API注册、双重认证体系等关键技术点,为深入理解该系统的请求处理生命周期提供了基础。

weixin_43674738的博客 189

NHibernate官方文档中文版——事务和并发(Transactions And Concurrency)

NHibernate本身并不是一个数据库。它是一个轻量级的对象-关系映射工具。因此,它的事务管理代理给对应的数据库连接。如果这个连接代理了一个分布式的事务,ISession管理的操作就会自动成为整个分布式事务的一部分。NHibernate可以被当作是一个简单的ADO.NET的配适器,再加上一些面向对象的语法。 配置,session和工厂 ISessionFactory是一个耗资源的线程安全对象...

weixin_30877493的博客 334

IEEE Journal of Biomedical and Health Informatics(JBHI)投稿经验分享

《IEEE Journal of Biomedical and Health Informatics投稿经验分享》详细记录了在影响因子6.7的中科院一区期刊JBHI的投稿历程(2025.1-5月,历时4个月)。文章重点分析:1)审稿特色:4位审稿人差异显著,领域专家意见专业但要求严苛;2)修改要点:需重视大修(补充实验/原理阐述),并注意将回复内容同步至正文;3)期刊特点:送审率高但审稿严格,常规投稿周期约4-5个月;4)实用建议:建议首次大修全力以赴,善用AI工具辅助写作,避免拖延。

LiRongLu_的博客 5096

NHibernate的Session和事务的处理

最初写Nhibernate例子的时候,只考虑了单个方法的事务 publicinterfaceIRepository<T>{TGetById(objectId);voidDelete(Tentity);voidSave(Tentity);}publicvoidDelete(...

dengshumi7891的博客 305

故障诊断 | 小波变换机械设备外圈振动信号故障诊断

故障诊断 | 小波变换机械设备外圈振动信号故障诊断

天天酷科研的博客 507

锂电池充放电管理-单片机通用模版

- **①两节锂电池通过电阻分压检测ADC,再根据电压划分电量等级;** - **②充电使用的是锂电池充电IC方案,可通过硬件电阻参数调节充电电流,并可以通过STAT引脚检测充电和满电状态(充电注意会抬高电压);** - **③放电根据ADC_BAT检测电池电量进行等级划分(注意大负载电压骤降瞬间);** - **④充放电过程注意在电量划分等级临界值来回抖动现象;**

a6662580的博客 1490

NHibernate系列文章十四:NHibernate事务

NHibernate系列文章十四:NHibernate事务 摘要 NHibernate实现事务机制非常简单,调用ISession.BeginTransaction()开启一个事务对象ITransaction,使用ITransaction.Commit()提交事务,使用ITransaction.Rollback()回滚事务。 标准NHiber...

weixin_30539835的博客 171

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[NHibernate]事务

目录 写在前面 文档与系列文章 事务 增删改查 总结 写在前面 上篇文章介绍了nhibernate的增删改查方法及增加修改操作,这篇文章将介绍nhibernate的事务操作。 SQL Server中的事务 在sql中使用begin transaction开启一个事务, rollback transaction用于回滚事务, commit transaction用于提交所有的事...

weixin_33755649的博客 178

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Nhibernate事务出错

Nhibernate底层事务回滚出错 转载于:https://www.cnblogs.com/relang99/archive/2007/07/20/825023.html

weixin_34289744的博客 332

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NHibernate之旅(6):探索NHibernate中的事务

本节内容 事务概述1.新建对象 【测试成功提交】【测试失败回滚】 2.删除对象3.更新对象4.保存更新对象结语 上一篇我们介绍了NHibernate中的Insert, Update, Delete操作,这篇我们来看看NHibernate中的事务。你通过它可以提交或者回滚你的操作。 事务概述 1.NHibernate中的事务(Transactions) 简单描述

技术资料收集站 322

asp.net mvc3 nhibernate 声明式事务

日常开发中,经常使用NHibernate事务。 因为NHibernate不支持嵌套式事务操作,所以ASP.NET MVC中通常使用一个事务来封装一次请求中的数据库操作。 下面是我认为比较漂亮的写法。 using System.Web.Mvc; using NHibernate; namespace WebMVC.Filters { public class Transac...

weixin_30312563的博客 181

[转]NHibernate之旅(6):探索NHibernate中的事务

本节内容 事务概述 1.新建对象 【测试成功提交】 【测试失败回滚】 2.删除对象 3.更新对象 4.保存更新对象 结语 上一篇我们介绍了NHibernate中的Insert, Update, Delete操作,这篇我们来看看NHibernate中的事务。你通过它可以提交或者回滚你的操作。 事务概述 1.NHibernate中的事务(Transaction...

weixin_34130389的博客 82

NHibernate事务中执行SQL

点击打开链接

460

Telegraf 容器化部署:单机三条命令跑通,K8s 一个 DaemonSet 搞定

Telegraf 容器化部署做到位,结果是这样:单机上一个容器就能按周期把系统指标写进 InfluxDB,K8s 里一个 DaemonSet 让每台节点自动出一份采集,节点扩缩容不用改任何清单。下面按"先选路 → 跑通最小部署 → 按场景深入"的顺序讲,用到的镜像和配置项都能在官方镜像与仓库文档里对得上。 ## 先选路:单机还是集群 先数节点,再决定走哪条路——这个判断决定后面所有资源参数。三

gitblog_02951的博客 451
上一篇: 探索PropertyGrid的使用
下一篇: 属性数据表的查询显示
群龙
博客等级 码龄18年 22粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值