DongLiORM 介绍

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

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

2、建立自己的业务类

  1)1-1示例

Image using  System;
Image    
namespace  BUL.Security
Image    
{
Image        
/// <summary>
Image        
/// 实体类UserItem 。(属性说明自动提取数据库字段的描述信息)
Image        
///  需要注意的是,属性名必须和字段名一一对应,这样就可以少些好多的配置文件了。
Image        
///  如果用过大名鼎鼎的NHibernate,你可能知道我为什么这样说了^_^。
Image        
/// </summary>
Image        
///         
Image        [DongLiORM.BusinessAtrribute("UsersView" //对应的数据表名称
Image
            ,new string[]{"UserID"} //对应数据表的主键
Image
            ,typeof(UserItem)  //对应的业务对象类型
Image
            )]
Image        
public class UserItem:DongLiORM.BusinessObject
Image        
{
Image            
public UserItem()
Image            
{ }
Image
Image            
private string _userid;
Image            
private string _username;
Image            
private string _pwd;
Image            
private string _email;
Image            
/// <summary>
Image            
/// 
Image            
/// </summary>
Image            public string UserID
Image            
{
Image                
set { _userid = value; }
Image                
get return _userid; }
Image            }

Image            
/// <summary>
Image            
/// 
Image            
/// </summary>
Image            public string UserName
Image            
{
Image                
set { _username = value; }
Image                
get return _username; }
Image            }

Image            
/// <summary>
Image            
/// 
Image            
/// </summary>
Image            public string Pwd
Image            
{
Image                
set { _pwd = value; }
Image                
get return _pwd; }
Image            }

Image            
/// <summary>
Image            
/// 
Image            
/// </summary>
Image            public string Email
Image            
{
Image                
set { _email = value; }
Image                
get return _email; }
Image            }
                 
Image        }

Image    }


  2)1-N示例

Image using  System;
Image    
using  System.Collections;
Image    
using  System.Text;
Image
Image    
namespace  BUL.Security
Image    
{        
Image        [DongLiORM.BusinessAtrribute(
"Groups",new string[]{"GroupID"},typeof(GroupItem))]
Image        [DongLiORM.ChildFieldAtrribute(
"BelongUsers"//属性的名字
Image
            typeof(UserGroupItem) //该属性的业务实体类
Image
            )
Image            ] 
//1-N就在这里
Image
        public class GroupItem:DongLiORM.BusinessObject
Image        
{
Image            
public GroupItem()
Image            

Image            }

Image
Image            
public string GroupID
Image            
{
Image                
get
Image                
{
Image                    
return _GroupID;
Image                }

Image                
set
Image                
{
Image                    _GroupID 
= value;
Image                }

Image            }

Image            
private string _GroupID="";
Image
Image            
public string GroupName
Image            
{
Image                
get
Image                
{
Image                    
return _GroupName;
Image                }

Image                
set
Image                
{
Image                    _GroupName 
= value;
Image                }

Image            }

Image            
private string _GroupName = "";
Image
Image            
Image            
public UserGroupItem[] BelongUsers
Image            
{
Image                
get
Image                
{
Image                    
return (UserGroupItem[])_BelongUsers.ToArray(typeof(UserGroupItem));
Image                }

Image                
set
Image                
{
Image                    _BelongUsers.Clear();
Image                    _BelongUsers.AddRange(value);
Image                }

Image            }

Image
Image            ArrayList _BelongUsers 
= new ArrayList();
Image
Image            
public void AddUsers(object[] UserGroups)
Image            
{
Image                _BelongUsers.AddRange(UserGroups);
Image            }
  
Image        }

Image        
Image        
Image        [DongLiORM.BusinessAtrribute(
"UserGroups",new string[]{"UserID","GroupID"},typeof(UserGroupItem))]
Image        
public class UserGroupItem:DongLiORM.BusinessObject
Image        
{
Image            
public UserGroupItem()
Image            
{ }
Image
Image            
public string UserID
Image            
{
Image                
get
Image                
{
Image                    
return _UserID;
Image                }

Image                
set
Image                
{
Image                    _UserID 
= value;
Image                }

Image            }

Image            
private string _UserID = "";
Image
Image
Image            
public string GroupID
Image            
{
Image                
get
Image                
{
Image                    
return _GroupID;
Image                }

Image                
set
Image                
{
Image                    _GroupID 
= value;
Image                }

Image            }

Image            
private string _GroupID = "";
Image        }
            
Image       
Image    }
 

3、调用示例

   1)新增

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

2) 查询
Image DongLiORM.BusinessAtrribute Attr  =  Common.Tools.CommonTool.GetBusinessAtrr( typeof (BUL.Security.UserItem));
Image      UserItem[] Users
= (UserItem[]) Attr.Reader.GetDataByCondition( " UserID like @UserID " ,
Image           
new  SqlParameter[] {new SqlParamter("@UserID","C054965%")}
Image           
/*
Image              或者
Image              "UserID like 'C054965%'
Image           
*/
Image         );
Image      
foreach (UserItem User  in  Users)
Image      
{
Image         Console.Write(
"{0}/t{1}/t{2}/n",User.UserID,User.UserName,User.Email); 
Image         
//
Image         
//也可以这样写
Image         
//Console.Write("{0}/t{1}/t{2}/n",User["UserID"],User["UserName"],User["Email"]); 
Image         
//
Image
      }
Image      
Image      
/*
Image        Top N 示例        
Image      
*/
Image      
Image      Users
= (UserItem[]) Attr.Reader.GetTopDataByCondition( " UserID like @UserID " ,
Image           
new  SqlParameter[] {new SqlParamter("@UserID","C054965%")} ,
Image           
5           
Image         );
Image      
foreach (UserItem User  in  Users)
Image      
{
Image         Console.Write(
"{0}/t{1}/t{2}/n",User.UserID,User.UserName,User.Email);         
Image      }
  

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

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

      这是我的第一个公开作品,欢迎大家拍砖。
      刘永红< Yahongq111@163.com>
      2007-06-06 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值