使用nhibernate的映射文件在一个类中将主键作为外键在另一个类中

时间:2012-03-22 10:57:49

标签: nhibernate nhibernate-mapping

您好我正在使用n-hibernate在MVC中开发应用程序 该应用程序是AskQuestion论坛,在第一页上显示问题列表,点击这些问题打开另一个页面,显示问题的答案。 这是我的表结构: 问题表:

QuestionID int
Question nvarchar(255)
Created_Date datetime
Modified_Date datetime
Created_By int
Modified_By int
Deleted nchar(1)

答案表:

AnswerId int
Answer nvarchar(255)
Created_Date datetime 
Modified_Date datetime  
Created_By int 
Modified_By  int
QuestionID int 
Deleted  nchar(1)

现在我想在它们之间创建一个映射,以便Question表中的primarykey QuestionID成为使用Mapping类(XML文件)的Answer表中的外键 请有人帮帮我......

1 个答案:

答案 0 :(得分:0)

以下是一些可以帮助您的代码。 我已经写过类和每个类的映射。 我只定义了itemsys QuestionID和AnswerID。 在Question类中,您现在有一个ISet,它包含所有引用的Answers。 在Answer类中,您有一个Questionfield,其中包含引用的Question。

希望这就是你想要的(示例代码在C#中)

问题类

public class Question
    {
        //other fields
        private int _id;
        private ISet<Answer> _answers;

        //other props
        public virtual int ID
        {
            get{ return _id; }
            set{ _id = value; }
        }

        public virtual ISet<Answer> Answers
        {
            get
            {
                return _answers;
            }
            set
            {
                _answers = value;
            }
        }
    }

问题的映射

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="App.Question, App" table="question">
    <id name="ID" column="questionid" type="int">
      <generator class="native" />
    </id>

    <!--Other Propertys-->

    <set name="Answers" table="answer" generic="true" inverse="true">
      <key column="questionId" />
      <one-to-many class="App.Answer, App"/>
    </set>
  </class>
</hibernate-mapping>

答案类

public class Answer
    {
        //other fields
        private int _id;
        private Question _question;

        //other props
        public virtual int ID
        {
            get{ return _id; }
            set{ _id = value; }
        }

        public virtual Question Question
        {
            get
            {
                return _question;
            }
            set
            {
                _question = value;
            }
        }
    }

答案的映射

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="App.Answer, App" table="answer">
    <id name="ID" column="answerid" type="int">
      <generator class="native" />
    </id>

    <!--Other Propertys-->

    <many-to-one name="Question" column="questionId" class="App.Question, App"/>
  </class>
</hibernate-mapping>