NHibernate学习 第八天 组件的运用

组件: 类似于asp.net 里面的用户控件的作用, 指意是 需要将数据库里面的两个字段组合在一起组成一个新的属性出现,正见的是 FristName + LastName = FullName 这种操作

应该如何操作?

以Users表中的 U_name 与 U_pwd 两个字段为个案例,显然是不怎么恰当的

1. 首先要将原实体类里面的两个字段给去掉

 

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

namespace  llr.Models
{
    [Serializable]
    
public   class  User
    {
        
public   virtual   int  Id {  get set ; }
        
// public virtual string U_name { get; set; }
        
// public virtual string U_pwd { get; set; }
         public   virtual   int  R_id {  get set ; }
    }
}

 

2. 为这个合并列创建一个实体类

 

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

namespace  llr.Models
{
   
public   class  LoginInfo
    {
        
public   virtual   string  U_name {  get set ; }
        
public   virtual   string  U_pwd {  get set ; }
        
public   string  LogInfo
        {
            
get {
                
return  U_name  +  U_pwd;
            }
        }
    }
}

 

3. 将实体类作为一个属性加到 User.cs里面去

 

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

namespace  llr.Models
{
    [Serializable]
    
public   class  User
    {
        
public   virtual   int  Id {  get set ; }
        
// public virtual string U_name { get; set; }
        
// public virtual string U_pwd { get; set; }
         public   virtual   int  R_id {  get set ; }

        
public   virtual  LoginInfo LogInfo {  get set ; }
    }
}

 

5. 修改User.hbm.xml 文件

 

< component  name ="LogInfo"  class ="llr.Models.LoginInfo,llr.Models" >
      
<!--  设置其它字段 第一个为属性名就是实体类里面的属性名 column 为数据库里面字段名   -->
      
< property  name ="U_name"  column ="u_name"  not-null ="false"  type ="string"  length ="10"   />
      
< property  name ="U_pwd"  column ="U_pwd"  not-null ="false"  type ="string"  length ="10" />
    
</ component >

 

将原来设置两个字段映射的property属性上面再套上一个 component 标签  name :为User类中的属性名 

 

OK 。以后访问就这样子了

 

llr.Models.User u  =   new  llr.Models.User();
        u.R_id 
=  Convert.ToInt32( this .DropDownList1.SelectedValue);
        u.LogInfo 
=   new  LoginInfo();
        u.LogInfo.U_name 
=   this .TextBox1.Text.Trim();
        u.LogInfo.U_pwd 
=   this .TextBox2.Text.Trim();

就像是有一个外键关系一样,那么,下一篇我们看看外键如何处理

你可能感兴趣的:(Hibernate)