• nhibernate学习之简单组合的映射


    1.学习目标
       通过学习nhibernate基础知识,了解nhibernate对组合属性的用法。
    2.开发环境和必要准备
       开发环境为:windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition
      必要准备:学习前六篇nhibernate学习系列Nhibernate学习之起步篇-1  ,Nhibernate学习起步之many-to-one篇 ,Nhibernate学习之many-to-many篇 ,nhibernate学习之三级联(Ternary Associations)篇Nhibernate学习之性能改善1nhibernate性能之二级缓存篇
    3.分析
       在关系数据库中,为了减少冗余,每个字段会被设计的更加独立。比如一个人的名字,包括名(FirstName),姓(LastName),通常在数据库中要设计为两个字段,这样便于检索所有姓张的用户,而在对象中,一个人的姓名往往是一个组合元素,nhibernate对组合属性也有很好的支持
    4.实现方法
       用于组织姓名的对象UserName  
    public class UserName
        
    {
            
    private string _firstName;
            
    private string _lastName;
            
    public string FirstName
            
    {
                
    get
                
    {
                    
    return _firstName;
                }

                
    set
                
    {
                    _firstName
    =value;
                }

            }

            
    public string LastName
            
    {
                
    get
                
    {
                    
    return _lastName;
                }

                
    set
                
    {
                    _lastName 
    = value;
                }

            }

        }

    用户对象:CompositeUser.cs
     public class CompositeUser
        
    {
            
    int _uid;
            UserName _name;
            
    public int Uid
            
    {
                
    get
                
    {
                    
    return _uid;
                }

                
    set
                
    {
                    _uid 
    = value;
                }

            }


            
    public UserName Name
            
    {
                
    get
                
    {
                    
    return _name;
                }

                
    set
                
    {
                    _name 
    = value;
                }

            }
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
        
    <class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompostName" lazy="false">
            
    <id name="Uid" column="Uid" unsaved-value="0">
                
    <generator class="native" />
            
    </id>
            
    <component name="Name" class="NhibernateSample1.UserName,NhibernateSample1">
                
    <property name="FirstName" column="FirstName"></property>
                
    <property name="LastName" column="LastName"></property>
            
    </component>
        
    </class>
    </hibernate-mapping>
    注意,compenent就是映射组合属性的节点,它的子节点property代表其组合属性
    CompositeUser数据表的表结构为

    新增一个CompositeUser对象
     public int AddCompositeUser(CompositeUser u)
            
    {
                session 
    = NhibernateSample1.NHibernateHelper.GetCurrentSession();
                ITransaction tra 
    = session.BeginTransaction();
                
    try
                
    {
                    
    int res =(int)session.Save(u);
                    tra.Commit();
                    
    return res;
                }

                
    catch
                
    {
                    tra.Rollback();
                }

                
    finally
                
    {
                    session.Close();
                }

                
    return -1;
            }
    测试代码
      [TestMethod]
            
    public void Test1()
            
    {
                usf.Configure();
                usf.ExportTables();
                CompositeUser u 
    = new CompositeUser();
                UserName name 
    = new UserName();
                name.FirstName 
    = "zhang";
                name.LastName 
    = "jill";
                u.Name 
    = name;
                
    int res =new NhibernateSample1.UserFixure().AddCompositeUser(u);
                Assert.IsTrue(res
    >0);
            }
    nhibernate真的是非常强大的一个框架,下篇将学习复杂组合的使用方法。今天先到这。睡了 
    用户对象的映射文件.CompositeUser.hbm.xml
  • 相关阅读:
    浏览器的跨域请求 与 CORS(跨域资源共享)
    HTML 占位符
    C# 中的 base和this
    推荐一个pdf引擎
    整理wifi相关的知识点
    交叉编译(ISC)DHCP:dhcp-4.3.0b1
    (转载)子网掩码,网关的概念
    海思-VB被占用导致vb无法去初始化
    c++创建文件时重命名同名文件
    iw创建虚拟网卡wlan1,ap_sta共存
  • 原文地址:https://www.cnblogs.com/encounter/p/2188832.html
Copyright © 2020-2023  润新知