科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道nhibernate学习之集合组合依赖

nhibernate学习之集合组合依赖

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

还是学习compenent的用法,上节实现了简单字段的组合,这节中将讨论两个问题:1.依赖对象有一个指向容器对象的引用。2。集合依赖

作者:ghost 来源:CSDN 2007年9月24日

关键字: ghost 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
效果图
 
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1741145

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章