DongLiORM 介绍

DongLiORM简介:
   DongLiORM是一个基于.net framework 2.0 的,开源的轻量级的ORM产品。目前仅支持Sql Server 2000及其以上版本。支持1-N映射关系,不用写专门的配置文件,比Castle更加简便(当然,功能就……^_^)。

示例:
1、首先在app.Config的appSettings节中加入如下语句:
  
None.gif      <!-- 数据链接字符串 -->
None.gif    
< add  key ="DbCon"  value ="server=dbserver;UID=sa;PWD=1234;database=TQM_2007;Pooling=true;Max Pool Size=50; Min Pool Size=10;" />         
None.gif    
<!-- 发送Email的帐号 -->
None.gif    
< add  key ="EmailUser"  value ="EmailUser" />
None.gif    
<!-- 发送Email帐号的密码 -->
None.gif    
< add  key ="EmailPwd"  value ="Email Password" />
None.gif    
<!-- 发送Email的Server -->
None.gif    
< add  key ="EmailServer"  value ="EmailServerName" />
None.gif    
<!-- 是否发送Email,如果为false,则不会发送Email -->
None.gif    
< add  key ="SendEmail"  value ="true" />
None.gif    
<!-- 在Select Top N语句中N的缺省值 -->
None.gif    
< add  key ="DefaultTop"  value ="300" />    

2、建立自己的业务类

  1)1-1示例

None.gif using  System;
None.gif    
namespace  BUL.Security
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 实体类UserItem 。(属性说明自动提取数据库字段的描述信息)
InBlock.gif        
///  需要注意的是,属性名必须和字段名一一对应,这样就可以少些好多的配置文件了。
InBlock.gif        
///  如果用过大名鼎鼎的NHibernate,你可能知道我为什么这样说了^_^。
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
///         

InBlock.gif        [DongLiORM.BusinessAtrribute("UsersView" //对应的数据表名称
ExpandedSubBlockStart.gifContractedSubBlock.gif
            ,new string[]dot.gif{"UserID"} //对应数据表的主键
InBlock.gif
            ,typeof(UserItem)  //对应的业务对象类型
InBlock.gif
            )]
InBlock.gif        
public class UserItem:DongLiORM.BusinessObject
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
public UserItem()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{ }
InBlock.gif
InBlock.gif            
private string _userid;
InBlock.gif            
private string _username;
InBlock.gif            
private string _pwd;
InBlock.gif            
private string _email;
ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//// <summary>
InBlock.gif            
/// 
ExpandedSubBlockEnd.gif            
/// </summary>

InBlock.gif            public string UserID
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif                
set dot.gif{ _userid = value; }
ExpandedSubBlockStart.gifContractedSubBlock.gif                
get dot.gifreturn _userid; }
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//// <summary>
InBlock.gif            
/// 
ExpandedSubBlockEnd.gif            
/// </summary>

InBlock.gif            public string UserName
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif                
set dot.gif{ _username = value; }
ExpandedSubBlockStart.gifContractedSubBlock.gif                
get dot.gifreturn _username; }
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//// <summary>
InBlock.gif            
/// 
ExpandedSubBlockEnd.gif            
/// </summary>

InBlock.gif            public string Pwd
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif                
set dot.gif{ _pwd = value; }
ExpandedSubBlockStart.gifContractedSubBlock.gif                
get dot.gifreturn _pwd; }
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//// <summary>
InBlock.gif            
/// 
ExpandedSubBlockEnd.gif            
/// </summary>

InBlock.gif            public string Email
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif                
set dot.gif{ _email = value; }
ExpandedSubBlockStart.gifContractedSubBlock.gif                
get dot.gifreturn _email; }
ExpandedSubBlockEnd.gif            }
                 
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

  2)1-N示例
None.gif using  System;
None.gif    
using  System.Collections;
None.gif    
using  System.Text;
None.gif
None.gif    
namespace  BUL.Security
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {        
ExpandedSubBlockStart.gifContractedSubBlock.gif        [DongLiORM.BusinessAtrribute(
"Groups",new string[]dot.gif{"GroupID"},typeof(GroupItem))]
InBlock.gif        [DongLiORM.ChildFieldAtrribute(
"BelongUsers"//属性的名字
InBlock.gif
            typeof(UserGroupItem) //该属性的业务实体类
InBlock.gif
            )
InBlock.gif            ] 
//1-N就在这里
InBlock.gif
        public class GroupItem:DongLiORM.BusinessObject
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
public GroupItem()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
public string GroupID
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
get
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
return _GroupID;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
set
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    _GroupID 
= value;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
private string _GroupID="";
InBlock.gif
InBlock.gif            
public string GroupName
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
get
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
return _GroupName;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
set
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    _GroupName 
= value;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
private string _GroupName = "";
InBlock.gif
InBlock.gif            
InBlock.gif            
public UserGroupItem[] BelongUsers
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
get
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
return (UserGroupItem[])_BelongUsers.ToArray(typeof(UserGroupItem));
ExpandedSubBlockEnd.gif                }

InBlock.gif                
set
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    _BelongUsers.Clear();
InBlock.gif                    _BelongUsers.AddRange(value);
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            ArrayList _BelongUsers 
= new ArrayList();
InBlock.gif
InBlock.gif            
public void AddUsers(object[] UserGroups)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                _BelongUsers.AddRange(UserGroups);
ExpandedSubBlockEnd.gif            }
  
ExpandedSubBlockEnd.gif        }

InBlock.gif        
InBlock.gif        
ExpandedSubBlockStart.gifContractedSubBlock.gif        [DongLiORM.BusinessAtrribute(
"UserGroups",new string[]dot.gif{"UserID","GroupID"},typeof(UserGroupItem))]
InBlock.gif        
public class UserGroupItem:DongLiORM.BusinessObject
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
public UserGroupItem()
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{ }
InBlock.gif
InBlock.gif            
public string UserID
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
get
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
return _UserID;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
set
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    _UserID 
= value;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
private string _UserID = "";
InBlock.gif
InBlock.gif
InBlock.gif            
public string GroupID
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
get
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
return _GroupID;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
set
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    _GroupID 
= value;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
private string _GroupID = "";
ExpandedSubBlockEnd.gif        }
            
InBlock.gif       
ExpandedBlockEnd.gif    }

3、调用示例

   1)新增

None.gif  UserItem AUser = new  UserItem();
None.gif      AUser.UserID
= " C054965 " ;
None.gif      AUser.Pwd
= " C054965 " ;
None.gif      AUser.UserName
= " 刘永红 " ;
None.gif      AUser.Email
= " yahongq111@163.com " ;
None.gif      
None.gif      DongLiORM.BusinessAtrribute Attr 
=  Common.Tools.CommonTool.GetBusinessAtrr( typeof (BUL.Security.UserItem));
None.gif      Attr.Writer.Insert(AUser);

2) 查询
None.gif DongLiORM.BusinessAtrribute Attr  =  Common.Tools.CommonTool.GetBusinessAtrr( typeof (BUL.Security.UserItem));
None.gif      UserItem[] Users
= (UserItem[]) Attr.Reader.GetDataByCondition( " UserID like @UserID " ,
ExpandedBlockStart.gifContractedBlock.gif           
new  SqlParameter[] dot.gif {new SqlParamter("@UserID","C054965%")}
ExpandedBlockStart.gifContractedBlock.gif           
/**/ /*
InBlock.gif              或者
InBlock.gif              "UserID like 'C054965%'
ExpandedBlockEnd.gif           
*/

None.gif         );
None.gif      
foreach (UserItem User  in  Users)
ExpandedBlockStart.gifContractedBlock.gif      
dot.gif {
InBlock.gif         Console.Write(
"{0}\t{1}\t{2}\n",User.UserID,User.UserName,User.Email); 
InBlock.gif         
//
InBlock.gif         
//也可以这样写
InBlock.gif         
//Console.Write("{0}\t{1}\t{2}\n",User["UserID"],User["UserName"],User["Email"]); 
InBlock.gif         
//
ExpandedBlockEnd.gif
      }

None.gif      
ExpandedBlockStart.gifContractedBlock.gif      
/**/ /*
InBlock.gif        Top N 示例        
ExpandedBlockEnd.gif      
*/

None.gif      
None.gif      Users
= (UserItem[]) Attr.Reader.GetTopDataByCondition( " UserID like @UserID " ,
ExpandedBlockStart.gifContractedBlock.gif           
new  SqlParameter[] dot.gif {new SqlParamter("@UserID","C054965%")} ,
None.gif           
5           
None.gif         );
None.gif      
foreach (UserItem User  in  Users)
ExpandedBlockStart.gifContractedBlock.gif      
dot.gif {
InBlock.gif         Console.Write(
"{0}\t{1}\t{2}\n",User.UserID,User.UserName,User.Email);         
ExpandedBlockEnd.gif      }
  

3)修改,假设修改前面的AUser
None.gif      UserItem NewUser = AUser.NarrowClone();
None.gif     NewUser.UserName
= " 刘永红修改测试 " ;
None.gif     NewUser.OldObject
= AUser;
None.gif     Attr.Writer.Update(NewUser);
4)删除  
None.gif    Attr.Writer.Delete(NewUser); 

备注:
      1)关于级联查询、DML:
          在1-N关系中,如果调用GetDataByCondition,会把所有相关的N层属性全部填充,如果只想查询本身,     则可以用GetSelfDataByCondition,对于删除操作,如果删除上级,则下级会跟着删除。对于Update,则不会跟着更改下级的外键,需自己手动更改。对于新增操作,会将所有的上级和下级数据全部存入数据库。
     
      2)关于事务处理:
          系统没有提供默认的事务支持功能,不过调用的时候可以用一下语句:
None.gif   using (System.Transactions.TransactionScope scope  =   new  System.Transactions.TransactionScope())
ExpandedBlockStart.gifContractedBlock.gif          
dot.gif {
InBlock.gif              
//
InBlock.gif              
//系统操作
InBlock.gif              
//              
InBlock.gif
              scope.Complete(); //这样就有了事务支持了,不过要记得在DCOM里面配置哦。
ExpandedBlockEnd.gif
          }
      3)关于性能:
          大量运用反射,没有做过严格的测试(所以性能应该不会很高)。这方面还有大量可以优化的地方(至少还可以用到缓存,但目前我还没有这样做)。     
     
         
      4)关于版权:
          既然说了开源,当然可以自由传播,修改,可以不加任何限制做商业用途,前提是保留第一版作者在源代码中的 版权描述,如果我将来有幸可以开公司,那么你不能跟我打这方面的官司:说这是你注册了的,有版权/专利权的产 品,我必须赔偿你的损失等等。
     
       DongLiORM 源码

      这是我的第一个公开作品,欢迎大家拍砖。
      刘永红< Yahongq111@163.com>
      2007-06-06 

转载于:https://www.cnblogs.com/Yahong111/archive/2007/06/06/774236.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值