Snake.Net 框架中的ORM(三) (Version 0.2 Beta)

5.CRUD操作
 CRUD(即Create, Retrieve, Update, Delete方法)是数据库的基本操作,很多程序员早期可能一直重复着这些简单后又枯草的工作。ORM最大的贡献就是把程序员从这种状态中解脱出来,而把精力集中于业务实体对象的设计。
 (1)实体类的创建、更新和删除
 Snake.Net通过ObjectManager对象实现与数据库的持久工作, ObjectManager使用Save和Delete方法实现业务实体对象的创建、更新和删除。请看下列代码:

None.gif // declare
None.gif
Customer customer;
None.gif
None.gifcustomer 
=   new  Customer( " ZZCFR " );
None.gifcustomer.CompanyName 
=   " Ana Trujillo Emparedados y helados " ;
None.gifcustomer.ContactName 
=   " Antonio Moreno " ;
None.gifcustomer.ContactTitle 
=   " Owner " ;
None.gifcustomer.Address 
=   " Forsterstr. 57 " ;
None.gifcustomer.City 
=   " Berlin " ;
None.gifcustomer.PostalCode 
=   " T2F 8M4 " ;
None.gifcustomer.Country 
=   " Canada " ;
None.gifcustomer.Phone 
=   " (604) 555-4729 " ;
None.gif
None.gif
using (IObjectManager om
ExpandedBlockStart.gifContractedBlock.gif    
=  ObjectManager.Create( typeof (Customer))) dot.gif {
InBlock.gif    om.Save(customer);
ExpandedBlockEnd.gif}

None.gif
None.gif
using (IObjectManager om 
ExpandedBlockStart.gifContractedBlock.gif
=  ObjectManager.Create( typeof (Customer))) dot.gif {
InBlock.gif    customer 
= om.Retrieve(1as Customer;
InBlock.gif    om.Delete(customer);
ExpandedBlockEnd.gif}

None.gif

(2)使用存储过程来实现创建、更新和删除
默认情况下,Snake.Net根据业务实体对象与数据表结构的映射,自动生成SQL语句,并进行操作。但是根据需要,用户可以通过配置文件利用存储过程,实现创建、更新和删除操作。参见下面的配置节点,Snake.Net可以通过设置insertProcedure, updateProcedure和deleteProcedure三个配置节点,用于执行指定的存储过程操作。
None.gif < object  name ="Eastasp.Enterprise.Security.Authorization.Session"  groupName ="enterprise.main" >
None.gif    
< insertProcedure  name ="usp_SessionInsert"  params ="-all-" />
None.gif
</ object >
None.gif

图 5-2-1 配置存储过程名称

(3)事务处理
Snake.Net有两种方法实现事务处理,一种是使用ObjectManager的事务处理方法:BeginTransaction、Commit和 Abort,请参见以下代码:

None.gif // declare
None.gif
Category c1, c2;
None.gif
None.gifc1 
=   new  Category();
None.gifc1.CategoryName 
=   " Seafood1 " ;
None.gifc1.Description 
=   " Seaweed and fish " ;
None.gif
None.gifc2 
=   new  Category();
None.gifc2.CategoryName 
=   " Seafood2 " ;
None.gifc2.Description 
=   " Seaweed and fish " ;
None.gif
None.gif
using (IObjectManager om
ExpandedBlockStart.gifContractedBlock.gif            
=  ObjectManager.Create( typeof (Category))) dot.gif {
InBlock.gif
InBlock.gif    Try
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif        om.BeginTransaction();
InBlock.gif        om.Save(c1);
InBlock.gif        om.Save(c2);
InBlock.gif        om.Commit();
ExpandedSubBlockEnd.gif    }

InBlock.gif    
catch(Exception ex)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif        om.Abort();
InBlock.gif        
throw ex;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

另一种方法是使用
TransactionContext 类,调用事务环境进行事务处理,请参见以下代码:
None.gif // declare
None.gif
Shipper shipper;
None.gifCustomer customer;
None.gifIObjectManager om1, om2;
None.gif
None.gifshipper 
=   new  Shipper();
None.gifshipper.CompanyName 
=   " Speedy Express " ;
None.gifshipper.Phone 
=   " (503) 555-9831 " ;
None.gif
None.gifcustomer 
=   new  Customer( " ZDEFR " );
None.gifcustomer.CompanyName 
=   " B¨®lido Comidas preparadas " ;
None.gifcustomer.ContactName 
=   " na Trujillo " ;
None.gifcustomer.ContactTitle 
=   " Owner " ;
None.gifcustomer.Address 
=   " Forsterstr. 57 " ;
None.gifcustomer.City 
=   " Berlin " ;
None.gifcustomer.PostalCode 
=   " T2F 8M4 " ;
None.gifcustomer.Country 
=   " Canada " ;
None.gifcustomer.Phone 
=   " (604) 555-4729 " ;
None.gif
None.gif
using (TransactionContext tc  =
ExpandedBlockStart.gifContractedBlock.gif            TransactionContext.Create())
dot.gif {
InBlock.gif    om1 
= ObjectManager.Create(typeof(Shipper));
InBlock.gif    om2 
= ObjectManager.Create(typeof(Customer));
InBlock.gif    
InBlock.gif    om1.Save(shipper);
InBlock.gif    om2.Save(customer);
InBlock.gif
InBlock.gif    tc.Consistent 
= true;
InBlock.gif

(4)接受业务实体
Snake.Net可以通过ObjectManager的Retrieve和List方法用于接受业务实体对象,前者可根据关键字接受单个的业务实体,后者可以根据一组关键字接受一组业务实体。请参看以下代码:
None.gif Customer customer;
None.gif
None.gif
using (IObjectManager om 
ExpandedBlockStart.gifContractedBlock.gif            
=  ObjectManager.Create( typeof (Customer))) dot.gif {
InBlock.gif    customer 
= om.Retrieve(1as Customer;
ExpandedBlockEnd.gif}

None.gif

转载于:https://www.cnblogs.com/soulroom/archive/2005/11/14/276365.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值