zoukankan      html  css  js  c++  java
  • 关于NHibernate中one to many 的问题

    最近研究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{
    11    class Program
    12    {
    13        static void Main(string[] args)
    14        {
    15            Configuration config = new Configuration().AddAssembly("Test.Model");
    16
    17            ISessionFactory sessionFactory = config.BuildSessionFactory();
    18
    19            ISession session = sessionFactory.OpenSession();
    20
    21            try
    22            {
    23
    24                Parent parent = new Parent();
    25                parent.Pname = "pw";
    26
    27                Child child = new Child();
    28                child.Cname = "child of pw";
    29                child.Parent = parent;
    30
    31                parent.Childs.Add(child);
    32
    33                session.Save(parent);
    34            }

    35            catch (Exception e)
    36            {
    37                throw new ApplicationException(e.Message);
    38            }

    39        }

    40    }

    41}

    然后运行总是会提示如下错误:“Unkown Entity Class :Test.Model.Parent”,我苦思一个晚上也没发现问题的所在,哪位高手能指点一下?感激不尽阿!
  • 相关阅读:
    Fiddler filter 过滤隐藏css、js、图片等
    十三、单元测试
    十二、文件操作
    Go_客户信息管理系统
    十一、面向对象编程_下
    十、面向对象编程_上
    九、map
    八、排序和查找
    七、数组和切片
    六、函数、包和错误处理
  • 原文地址:https://www.cnblogs.com/pw/p/389533.html
Copyright © 2011-2022 走看看