Hxj.Data V1.5.1版本开始支持字段组合更新。

例如:update table set a=b+c

        update table set a=a+1

(+、-、*、/、%)依次类推。

 

下面将举具体的例子。(例子只是为了测试效果,没有实际意义)

例一、

DbSession.Default.Update<Products>(Products._.UnitPrice, Products._.ReorderLevel + Products._.UnitPrice, Products._.ProductID == 1);
生成的sql如下:
Text: 
UPDATE [Products] SET [UnitPrice]=[Products].[ReorderLevel] + [Products].[UnitPrice] 
WHERE [Products].[ProductID] = @mjpxqimmtmiyguvv 
 
Parameters: 
@mjpxqimmtmiyguvv[Int32] = 1 

就是将UnitPrice字段的值更新为UnitPrice加上ReorderLevel字段的值。

 

例二、

DbSession.Default.Update<Products>(Products._.UnitPrice, Products._.UnitPrice + 1, Products._.ProductID == 1);
生成的sql如下:
Text: 
UPDATE [Products] SET [UnitPrice]=[Products].[UnitPrice] + @tszvynxwnukkjuzj 
WHERE [Products].[ProductID] = @anuixieadujzvvka 
 
Parameters: 
@tszvynxwnukkjuzj[Int32] = 1 
@anuixieadujzvvka[Int32] = 1 
这里就是将UnitPrice字段的值加1。
 
例三、
using (DbTrans trans = DbSession.Default.BeginTransaction())
{
    trans.Update<Products>(Products._.UnitPrice, Products._.UnitPrice + 1.4, Products._.ProductID == 1);

    trans.Update<Products>(Products._.UnitPrice, Products._.UnitPrice - 2, Products._.ProductID == 2);

    trans.Commit();
}

生成的sql:

Text: 
UPDATE [Products] SET [UnitPrice]=[Products].[UnitPrice] + @zeylmhakevldbgfn 
WHERE [Products].[ProductID] = @enbemtqnigeugdej 
 
Parameters: 
@zeylmhakevldbgfn[Double] = 1.4 
@enbemtqnigeugdej[Int32] = 1 
 
 
Text: 
UPDATE [Products] SET [UnitPrice]=[Products].[UnitPrice] - @vypfmbnjgdpeakqm 
WHERE [Products].[ProductID] = @dqwlfxqjconzrqa 
 
Parameters: 
@vypfmbnjgdpeakqm[Int32] = 2 
@dqwlfxqjconzrqa[Int32] = 2 

 

通过事务更新操作。

 

不过需要注意的是,这个相加或者相减的值要与字段的类型一致,要手动先转换好。

posted on 2010-04-08 23:00  steven hu  阅读(2751)  评论(8编辑  收藏