专注IOS开发

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

由于本人工作中需要用到DevExpress,并且看了下中文资料很少,便记录下来,方便日后查看。DevExpress的功能是非常强大的,在我初次接触的时候便有这个感觉。这次主要看Unit of Work 吧。

Unit of Work 源自于 Session.

我们先看下他官网上的解释:

http://documentation.devexpress.com/#XPO/CustomDocument2138 

 

1.声明:

 1 public class UOWPerson : XPObject
 2 {
 3     string fName;
 4     public UOWPerson(Session session) : base(session) { }
 5     public UOWPerson(Session session, string name) : base(session)
 6     {
 7         this.fName = name;
 8     }
 9     public string Location { 
10         get { return GetPropertyValue<string>("Location"); }
11         set { SetPropertyValue<string>("Location", value); }
12     }
13     public string Name {
14         // We cannot use GetPropertyValue in the getter  
15         // below because the fName field is explicitly defined 
16         get { return fName; }
17         set { SetPropertyValue<string>("Name", ref fName, value); }
18     }
19 }

如果是对一张表进行增删改查,我们一般是用VS2010的ORM自动生成代码,也就是类似Name的这种声明方式。当然如果是对多表操作的话,还是要先写好存储过程,然后再自动生成代码。

2.使用

1 using(UnitOfWork uow = new UnitOfWork()) {
2     // Create, update or delete objects 
3     uow.CommitChanges();
4 }

一般就是用 CommitChanges() 这个方法,会自动更新你的操作,如果在CommitChanges()之前,uow被disposed的话,那之前的操作都会roll back,也就是说不写进数据库中,是不是相当强大,不需要写一句关于数据库操作方面的。

 

 3.看下Session和Unit Of Work 的区别

 1 using(UnitOfWork uow = new UnitOfWork()) {
 2     UOWPerson p = new UOWPerson(uow, "Mike");
 3     // p.Save(); when working with a Session 
 4 
 5     p = new UOWPerson(uow, "John");
 6     // p.Save(); when working with a Session 
 7 
 8     p = new UOWPerson(uow);
 9     p.Name = "Bob";
10     p.Location = "US";
11     // p.Save(); when working with a Session 
12 
13     // Save all the changes made 
14     uow.CommitChanges();
15 }

可以看到如果是用Sessin的话,你需要对每一个操作都要进行Save下,但是Unit Of Work只需要最后用CommitChanges()方法,因为Unit of Work包含了一个持续对象的列表,它可以对每个操作都进行跟踪。

posted on 2012-07-26 17:14  汉唐盛世  阅读(1801)  评论(2编辑  收藏  举报