1.学习目标

通过学习nhibernate基础知识,了解nhibernate对组合属性的用法。

2.开发环境和必要准备

开发环境为:windows 2003,Visual studio .Net 2005,Sql server 2005 developer edition

在关系数据库中,为了减少冗余,每个字段会被设计的更加独立。比如一个人的名字,包括名(FirstName),姓(LastName),通常在数据库中要设计为两个字段,这样便于检索所有姓张的用户,而在对象中,一个人的姓名往往是一个组合元素,nhibernate对组合属性也有很好的支持

4.实现方法

用于组织姓名的对象UserName

nhibernate学习之简单组合的映射_开发环境public class UserName

nhibernate学习之简单组合的映射_hibernate_02nhibernate学习之简单组合的映射_子节点_03    nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05        private string _firstName;

nhibernate学习之简单组合的映射_hibernate_05        private string _lastName;

nhibernate学习之简单组合的映射_hibernate_05        public string FirstName

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09        nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05            get

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                return _firstName;

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_05            set

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                _firstName=value;

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_16        }

nhibernate学习之简单组合的映射_hibernate_05        public string LastName

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09        nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05            get

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                return _lastName;

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_05            set

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                _lastName = value;

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_16        }

nhibernate学习之简单组合的映射_开发环境_41    }


用户对象:CompositeUser.cs

nhibernate学习之简单组合的映射_开发环境 public class CompositeUser

nhibernate学习之简单组合的映射_hibernate_02nhibernate学习之简单组合的映射_子节点_03    nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05        int _uid;

nhibernate学习之简单组合的映射_hibernate_05        UserName _name;

nhibernate学习之简单组合的映射_hibernate_05        public int Uid

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09        nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05            get

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                return _uid;

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_05            set

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                _uid = value;

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_16        }

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

nhibernate学习之简单组合的映射_hibernate_05        public UserName Name

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09        nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05            get

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                return _name;

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_05            set

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                _name = value;

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_16        } nhibernate学习之简单组合的映射_开发环境<?xml version="1.0" encoding="utf-8" ?>

nhibernate学习之简单组合的映射_开发环境<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">

nhibernate学习之简单组合的映射_开发环境    <class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompostName" lazy="false">

nhibernate学习之简单组合的映射_开发环境        <id name="Uid" column="Uid" unsaved-value="0">

nhibernate学习之简单组合的映射_开发环境            <generator class="native" />

nhibernate学习之简单组合的映射_开发环境        </id>

nhibernate学习之简单组合的映射_开发环境        <component name="Name" class="NhibernateSample1.UserName,NhibernateSample1">

nhibernate学习之简单组合的映射_开发环境            <property name="FirstName" column="FirstName"></property>

nhibernate学习之简单组合的映射_开发环境            <property name="LastName" column="LastName"></property>

nhibernate学习之简单组合的映射_开发环境        </component>

nhibernate学习之简单组合的映射_开发环境    </class>

nhibernate学习之简单组合的映射_开发环境</hibernate-mapping>注意,compenent就是映射组合属性的节点,它的子节点property代表其组合属性

CompositeUser数据表的表结构为

nhibernate学习之简单组合的映射_开发环境_95

新增一个CompositeUser对象

nhibernate学习之简单组合的映射_开发环境 public int AddCompositeUser(CompositeUser u)

nhibernate学习之简单组合的映射_hibernate_02nhibernate学习之简单组合的映射_子节点_03        nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05            session = NhibernateSample1.NHibernateHelper.GetCurrentSession();

nhibernate学习之简单组合的映射_hibernate_05            ITransaction tra = session.BeginTransaction();

nhibernate学习之简单组合的映射_hibernate_05            try

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                int res =(int)session.Save(u);

nhibernate学习之简单组合的映射_hibernate_05                tra.Commit();

nhibernate学习之简单组合的映射_hibernate_05                return res;

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_05            catch

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                tra.Rollback();

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_05            finally

nhibernate学习之简单组合的映射_开发环境_08nhibernate学习之简单组合的映射_子节点_09            nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05                session.Close();

nhibernate学习之简单组合的映射_hibernate_16            }

nhibernate学习之简单组合的映射_hibernate_05            return -1;

nhibernate学习之简单组合的映射_开发环境_41        }测试代码

nhibernate学习之简单组合的映射_开发环境  [TestMethod]

nhibernate学习之简单组合的映射_开发环境        public void Test1()

nhibernate学习之简单组合的映射_hibernate_02nhibernate学习之简单组合的映射_子节点_03        nhibernate学习之简单组合的映射_开发环境_04{

nhibernate学习之简单组合的映射_hibernate_05            usf.Configure();

nhibernate学习之简单组合的映射_hibernate_05            usf.ExportTables();

nhibernate学习之简单组合的映射_hibernate_05            CompositeUser u = new CompositeUser();

nhibernate学习之简单组合的映射_hibernate_05            UserName name = new UserName();

nhibernate学习之简单组合的映射_hibernate_05            name.FirstName = "zhang";

nhibernate学习之简单组合的映射_hibernate_05            name.LastName = "jill";

nhibernate学习之简单组合的映射_hibernate_05            u.Name = name;

nhibernate学习之简单组合的映射_hibernate_05            int res =new NhibernateSample1.UserFixure().AddCompositeUser(u);

nhibernate学习之简单组合的映射_hibernate_05            Assert.IsTrue(res>0);

nhibernate学习之简单组合的映射_开发环境_41        }nhibernate真的是非常强大的一个框架,下篇将学习复杂组合的使用方法。今天先到这。睡了 

用户对象的映射文件.CompositeUser.hbm.xml