2014年10月24日星期五

[NHibernate]事务 - wolfy

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
[NHibernate]事务 - wolfy  阅读原文»

目录

写在前面

文档与系列文章

事务

增删改查

总结

写在前面

上篇文章介绍了nhibernate的增删改查方法及增加修改操作,这篇文章将介绍nhibernate的事务操作。

SQL Server中的事务

在sql中使用begin transaction开启一个事务, rollback transaction用于回滚事务, commit transaction用于提交所有的事务处理结果,即确认事务的处理。事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功,若其中有一个语句执行失败,则整个处理就算失败,并恢复到处理前的状态。

begin transaction开启一个事务,以成功提交或者失败回滚结束。

通过上面的描述,我们得到这样一个消息,事务处理中的操作要么都成功,要么都回滚。上篇文章中我们遗留了一个问题:普通的增删改查,如果成功则提交,如果失败了,则回滚。和事务是有区别的,比如一个循环中的,插入操作,如果成功了则提交,如果有坏数据,但并不影响已经提交的数据,而事务不同,数据是一个稻草上的蚂蚱,你发达了都发达,你阴沟里翻船了就会都翻船。

文档与系列文章

[Nhibernate]体系结构

[NHibernate]ISessionFactory配置

[NHibernate]持久化类(Persistent Classes)

[NHibernate]O/R Mapping基础

[NHibernate]集合类(Collections)映射

[NHibernate]关联映射

[NHibernate]Parent/Child

[NHibernate]缓存(NHibernate.Caches)

[NHibernate]NHibernate.Tool.hbm2net

[NHibernate]Nullables

[NHibernate]Nhibernate如何映射sqlserver中image字段

[NHibernate]基本配置与测试

[NHibernate]HQL查询

[NHibernate]条件查询Criteria Query

[NHibernate]增删改操作

事务

增删改查

nhibernate中的事务也是通过ISession来创建,在实际项目中应用的代码如下:

增加或者修改客户对象

1 /// <summary>
2 /// 通过事务的方式添加或者修改
3 /// </summary>
4 /// <param name="customer">添加的对象</param>
5 /// <returns>是否成功</returns>
6 public bool SaveOrUpdateByTrans(Customer customer)
7 {
8 NHibernateHelper nhibernateHelper = new NHibernateHelper();
9 var session = nhibernateHelper.GetSession();
10 using (ITransaction transaction = session.BeginTransaction())
11 {
12 try
13 {
14 session.SaveOrUpdate(customer);
15 session.Flush();
16 //成功则提交
17 transaction.Commit();
18 return true;
19 }
20 catch (Exception)
21 {
22 //出现异常,则回滚
23 transaction.Rollback();
24 throw;
25 }
26 }
27 }

那么我在这里再问一下,什么时候用事务?

个人觉得,任何时候都需要用,增删改查都需要用,因为你不知道程序啥时候发神经病。通过事务的处理的特性要么都成功,要么就都回滚。特别是在银行系统中,你敢不用吗?如果发现错误了,还扣你的钱,你愿意?还有在程序中,在一对多关系处理的时候,这些地方也应该注意,涉及到主外键关系,要么都成功删除,要么就回滚,别出现那种删除了一部分,留一部分的情况,那些数据很恶心(之前就帮客户处理过几千条的错误数据,真心恶心死了)。

测试

1 /// <summary>
2 /// 添加客户信息
3 /// </summary>
4 /// <param name="sender"></param>
5 /// <param name="e"></param>
获取手机的常用型号(如Lumia920,而非RM-822) - 阳光是金色的  阅读原文»

之前WP7时代可以用API获得WP手机的型号如lumia510,但是到了WP8后用APi只能获得硬件版本号了如RM-822,这种型号可以让我们更详细的了解具体的硬件版本,比如国行和港行,设备版本号不一样(但是我不记得了�(�-�)�),一个支持4G,一个不支持,但是型号都是Lumia920,这或许是微软的考量吧。

但是当我们只想要手机常用的型号时,发现没有这个Api了,真的是很麻烦。

我在GitHub上找到了一个手机型号转换器,PhoneNameResolver,地址 https://github.com/Aureate-Sunshine/PhoneNameResolver

它可以把设备版本号翻译成常见的型号。

使用的就是这个函数,把获取到的厂商和设备版本号传入,获取一个CanonicalPhoneName对象,

public static CanonicalPhoneName Resolve(string manufacturer, string model)

这个对象包含以下属性

public class CanonicalPhoneName
{
public string ReportedManufacturer { get; set; }
public string ReportedModel { get; set; }
public string CanonicalManufacturer { get; set; }
public string CanonicalModel { get; set; }
public string Comments { get; set; }
public bool IsResolved { get; set; }


public string FullCanonicalName
{
get { return CanonicalManufacturer + " " + CanonicalModel; }
}
}

想要显示lumia920这样的型号话,获取他的CanonicalModel就好了,还有FullCanonicalName就是Nokia Lumia 920这样的完整型号。


本文链接:<WP8开发学习笔记>获取手机的常用型号(如Lumia920,而非RM-822),转载请注明。

阅读更多内容

没有评论:

发表评论