nhibernate学习之集合组合依赖

1.学习目标
   还是学习compenent的用法,上节实现了简单字段的组合,这节中将讨论两个问题:1.依赖对象有一个指向容器对象的引用。2。集合依赖
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学习之性能改善1  nhibernate性能之二级缓存篇

3.通过parent为依赖组合对象映射一个指向容器对象的引用
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;
            }
        }
    }
UserName.cs
public class UserName
    {
        private string _firstName;
        private string _lastName;
        CompositeUser _user;
        public string FirstName
        {
            get
            {
                return _firstName;
            }
            set
            {
                _firstName=value;
            }
        }
        public string LastName
        {
            get
            {
                return _lastName;
            }
            set
            {
                _lastName = value;
            }
        }
        public CompositeUser User
        {
            get
            {
                return _user;
            }
            set
            {
                _user = value;
            }
        }
    }
映射文件:CompositeUser.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompositeUser" lazy="false">
        <id name="Uid" column="Uid" unsaved-value="0">
            <generator class="native" />
        </id>
        <component name="Name" class="NhibernateSample1.UserName,NhibernateSample1">
            <parent name="User"></parent>
            <property name="FirstName" column="FirstName"></property>
            <property name="LastName" column="LastName"></property>
        </component>
    </class>
</hibernate-mapping>
注意parent是指向容器对象的引用
加载一个CompositeUser对象,结果如图

4. 集合组合依赖
Composite.cs
public class CompositeUser
    {
        int _uid;
        UserName _name;
        ISet _userNames = new HashedSet();
        DateTime _birthDay = DateTime.Now;
        public int Uid
        {
            get
            {
                return _uid;
            }
            set
            {
                _uid = value;
            }
        }
        public ISet UserNames
        {
            get
            {
                return _userNames;
            }
            set
            {
                _userNames = value;
            }
        }
        public DateTime BirthDay
        {
            get
            {
                return _birthDay;
            }
            set
            {
                _birthDay = value;
            }
        }
    }
UserName.cs
public class UserName
{
    private string _firstName;
    private string _lastName;
    CompositeUser _user;
    public string FirstName
    {
        get
        {
            return _firstName;
        }
        set
        {
            _firstName = value;
        }
    }
    public string LastName
    {
        get
        {
            return _lastName;
        }
        set
        {
            _lastName = value;
        }
    }
    public CompositeUser User
    {
        get
        {
            return _user;
        }
        set
        {
            _user = value;
        }
    }
}
映射文件CompositeUser.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="NhibernateSample1.CompositeUser,NhibernateSample1" table="CompositeUser" lazy="false">
        <id name="Uid" column="Uid" unsaved-value="0">
            <generator class="native" />
        </id>
        <set name="UserNames" table="UserNames" lazy="true">
            <key column="Uid"/>
            <composite-element  class="NhibernateSample1.UserName,NhibernateSample1">
                <property name="FirstName" column="FirstName"></property>
                <property name="LastName" column="LastName"></property>
            </composite-element >
        </set>
        <property name="BirthDay" type="DateTime"></property>
    </class>
</hibernate-mapping>
注意:Composite可以包含集合也可以不包含集合,上面这样的配置就不包括集合,映射的属性可以选择为List,map,bag,idbag
运行添加一个Composite的测试代码,会在数据库中建立两个数据表 CompositeUser和UserNames
效果图
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值