现在的位置: 首页 > 综合 > 正文

关于NHibernate中one to many 的问题

2011年03月03日 ⁄ 综合 ⁄ 共 4128字 ⁄ 字号 评论关闭
最近研究NHibernate在多表映射方面遇到了一些问题,下面是我的具体代码:
1.首先建立两张表:parent和child,映射文件和Model类如下:
child.cs
 1using System;
 2using System.Collections;
 3
 4namespace Test.Model
 5{
 6    
 7
 8    /// <summary>
 9    /// Child object for NHibernate mapped table 'child'.
10    /// </summary>

11    public class Child
12    {
13        
14        protected int _id;
15        protected int _parentid;
16        protected string _cname;
17        protected Parent parent;
18
19        
20
21        public Child() { }
22
23        public Child( int parentid, string cname)
24        {
25            this._parentid = parentid;
26            this._cname = cname;
27        }

28
29
30
31        public int Id
32        {
33            get {return _id;}
34            set {_id = value;}
35        }

36
37        public int Parentid
38        {
39            get return _parentid; }
40            set { _parentid = value; }
41        }

42
43        public string Cname
44        {
45            get return _cname; }
46            set
47            {
48                if ( value != null && value.Length > 50)
49                    throw new ArgumentOutOfRangeException("Invalid value for Cname", value, value.ToString());
50                _cname = value;
51            }

52        }

53
54        public Parent Parent
55        {
56            get return parent; }
57            set { parent = value; }
58        }

59    
60
61    }

62    
63}

parent.cs

 1using System;
 2using System.Collections;
 3using Iesi.Collections;
 4
 5namespace Test.Model
 6{
 7
 8    /// <summary>
 9    /// Parent object for NHibernate mapped table 'parent'.
10    /// </summary>

11    public class Parent
12    {
13        
14        protected int _id;
15        protected string _pname;
16        protected ISet childs = new HashedSet();
17
18
19
20        public Parent() { }
21
22        public Parent( string pname)
23        {
24            this._pname = pname;
25        }

26
27
28
29        public int Id
30        {
31            get {return _id;}
32            set {_id = value;}
33        }

34
35        public string Pname
36        {
37            get return _pname; }
38            set
39            {
40                if ( value != null && value.Length > 50)
41                    throw new ArgumentOutOfRangeException("Invalid value for Pname", value, value.ToString());
42                _pname = value;
43            }

44        }

45
46        public ISet Childs
47        {
48            get return childs; }
49            set { childs = value; }
50        }

51
52
53    }

54}

child.hbm.xml:

 1<?xml version="1.0" encoding="utf-8" ?>
 2<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
 3    <class name="Test.Model.Child, Test.Model" table="child">
 4        <id name="Id" type="Int32" unsaved-value="null">
 5            <column name="child_id" length="4" sql-type="int" not-null="true" unique="true" index="PK_child"/>
 6            <generator class="native" />
 7        </id>
 8    <many-to-one
 9      name="Parent"
10      column="parent_id"
11      class="Test.Model.Parent,Test.Model"
12      unique="true"
13    />
14    <property name="Cname" type="String">
15            <column name="cname" length="50" sql-type="varchar" not-null="false"/>
16        </property>
17    </class>
18</hibernate-mapping>

parent.hbm.xml:

 1<?xml version="1.0" encoding="utf-8" ?>
 2<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
 3    <class name="Test.Model.Parent,Test.Model" table="parent">
 4        <id name="Id" type="Int32" unsaved-value="null">
 5            <column name="parent_id" length="4" sql-type="int" not-null="true" unique="true" index="PK_parent"/>
 6            <generator class="native" />
 7        </id>
 8    <set name="Childs" cascade="all" inverse="true" lazy="false">
 9      <key column="parent_id" />
10      <one-to-many class="Test.Model.Child, Test.Model" />
11    </set>
12        <property name="Pname" type="String">
13            <column name="pname" length="50" sql-type="varchar" not-null="false"/>
14        </property>
15  </class>
16</hibernate-mapping>

配置好了以后,我做如下操作:

 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using NHibernate;
 5using NHibernate.Cfg;
 6using Test.Model;
 7using Iesi.Collections;
 8
 9namespace Console1
10

抱歉!评论已关闭.