I've been doing this for about an hour now but still can't figure out what's wrong... I have an Article having many Comments. So, this is my code.
Code:
/*
 * Article.cs 0.1
 *
 * Copyright 2006 Ian Escarro. All rights reserved.
 * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
using System;
using System.Drawing;
using System.Collections;
namespace Agta.ManilaBulletin.Data
{
   /// <summary>
   /// 
   /// </summary>
   public class Article : Observable
   {
      private int id;
      private DateTime date;
      private string keyword;
      private bool isTopStory;
//      private string body;
      private Teaser teaser;
      private Body body;
      private Image image;
      private string caption;
      private bool isInactive;
      private Section section;
      private ArrayList comments = new ArrayList();
      public Article(int id, DateTime date, string keyword, 
         bool isTopStory, Body body, Image image, 
         string caption, bool isInactive, Section section) 
      {
         this.Id = id;
         this.Date = date;
         this.Keyword = keyword;
         this.IsTopStory = isTopStory;
         this.Body = body;
         this.Image = image;
         this.Caption = caption;
         this.IsInactive = isInactive;
         this.Section = section;
      }
      public Article(int id) : this (id, DateTime.Now, "", false, new Body(), new Bitmap(1, 1), "", false, new Section()) {}
      /// <summary>
      /// Creates a new instance of Article.
      /// </summary>
      public Article() : this (0) {}
      public int Id 
      {
         get { return id; }
         set { id = value; this.NotifyObservers(); }
      }
      public DateTime Date 
      {
         get { return date; }
         set { date = value; this.NotifyObservers(); }
      }
      public string Keyword 
      {
         get { return keyword; }
         set { keyword = value; this.NotifyObservers(); }
      }
      public bool IsTopStory 
      {
         get { return isTopStory; }
         set { isTopStory = value; this.NotifyObservers(); }
      }
//      public string Body 
//      {
//         get { return body; }
//         set { body = value; this.NotifyObservers(); }
//      }
      public Body Body 
      {
         get { return body; }
         set 
         { 
            body = value; 
            this.teaser = body;
            this.NotifyObservers(); 
         }
      }
      public Image Image 
      {
         get { return image; }
         set { image = value; this.NotifyObservers(); }
      }
      public string Caption 
      {
         get { return caption; }
         set { caption = value; this.NotifyObservers(); }
      }
      public bool IsInactive 
      {
         get { return isInactive; }
         set { isInactive = value; this.NotifyObservers(); }
      }
      public Section Section 
      {
         get { return section; }
         set { section = value; this.NotifyObservers(); }
      }
      public ArrayList Comments 
      {
         get { return comments; }
         set { comments = value; this.NotifyObservers(); }
      }
      public void AddComment(Comment comment) 
      {
         if (comment == null)
            throw new NullReferenceException();
         if (!comments.Contains(comment)) 
         {
            comment.Article = this;
            comments.Add(comment);
         }
      }
      public void RemoveComment(Comment comment) 
      {
         comments.Remove(comment);
      }
      public int CountComments() 
      {
         return comments.Count;
      }
   }
}
 and my Comment
Code:
/*
 * Comment.cs 0.1
 *
 * Copyright 2006 Ian Escarro. All rights reserved.
 * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
using System;
namespace Agta.ManilaBulletin.Data
{
   /// <summary>
   /// 
   /// </summary>
   public class Comment
   {
      private Article article;
      private int number;
      private string sender;
      private string email;
      private string subject;
      private string message;
      private bool isHidden;
      public Comment(Article article, int number, string sender, 
         string email, string subject, string message, 
         bool isHidden) 
      {
         this.Article = article;
         this.Number = number;
         this.Sender = sender;
         this.Email = email;
         this.Subject = subject;
         this.Message = message;
         this.IsHidden = isHidden;
      }
      public Comment(Article article, string sender, string email, 
         string subject, string message) : this (article, 0, 
         sender, email, subject, message, true) {}
      public Comment(string sender, string email, string subject, 
         string message) : this (null, sender, email, 
         subject, message) {}
      
      /// <summary>
      /// Creates a new instance of Comment.
      /// </summary>
      public Comment() : this ("", "", "", "") {}
      public Article Article 
      {
         get { return article; }
         set { article = value; }
      }
      public int Number 
      {
         get { return number; }
         set { number = value; }
      }
      public string Sender 
      {
         get { return sender; }
         set { sender = value; }
      }
      public string Email 
      {
         get { return email; }
         set { email = value; }
      }
      public string Subject 
      {
         get { return subject; }
         set { subject = value; }
      }
      public string Message 
      {
         get { return message; }
         set { message = value; }
      }
      public bool IsHidden 
      {
         get { return isHidden; }
         set { isHidden = value; }
      }
   }
}
 Now for the mapping
Code:
<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0"
namespace="Agta.ManilaBulletin.Data" assembly="webartiData">
   <class name="Article" table="Articles">
      <id name="Id" column="ArticleId" type="Int32">
         <generator class="native"/>
      </id>
      <property name="Date" column="Date" type="DateTime"/>
      <property name="Keyword" column="Keyword" type="String"/>
      <property name="IsTopStory" column="IsTopStory" type="Boolean"/>
      <!-- <property name="Body.Text" column="Body" type="String"/>-->
      <!--<property name="Image" column="Image" type="Boolean"/>-->
      <property name="Caption" column="Caption" type="String"/>
      <property name="IsInactive" column="IsInactive" type="Boolean"/>
      <!--<property name="Section" column="SectionId" type="Int32"/>-->
      <set name="Comments" inverse="true">
         <key column="ArticleId"/>
         <one-to-many class="Comment"/>
      </set>
      <!--<subclass name="Body">
         <property name="Text" column="Body" type="String"/>
      </subclass>-->
   </class>
</hibernate-mapping>
 and
Code:
<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0"
namespace="Agta.ManilaBulletin.Data" assembly="webartiData">
   <class name="Comment" table="ArticleComments">
      <id name="Number" column="CommentNumber" type="Int32">
         <generator class="identity"/>
      </id>
      <property name="Sender" column="Sender" type="String"/>
      <property name="Email" column="Email" type="String"/>      
      <property name="Subject" column="Subject" type="String"/>      
      <property name="Message" column="Message" type="String"/>      
      <property name="IsHidden" column="IsHidden" type="Boolean"/>
      <many-to-one name="Article" column="ArticleId" not-null="true"/>
   </class>
</hibernate-mapping>
 Help please? Thanks a bunch. 
When tested btw, it says
Code:
TestCase 'Agta.ManilaBulletin.Test.ObservableFactoryTest.TestCreate'
failed: NHibernate.ADOException : Could not save object
  ----> System.InvalidCastException : Specified cast is not valid.
   at NHibernate.Impl.SessionImpl.SaveWithGeneratedIdentifier(Object obj, CascadingAction action, Object anything)
   at NHibernate.Impl.SessionImpl.Save(Object obj)
   D:\ian\projects\csharp\webarti\webartiData\Data\ObservableFactory.cs(47,0): at Agta.ManilaBulletin.Data.ObservableFactory.Create()
   d:\ian\projects\csharp\webarti\webartidata\test\observablefactorytest.cs(61,0): at Agta.ManilaBulletin.Test.ObservableFactoryTest.TestCreate()
   --ADOException
   at NHibernate.Type.SetType.Wrap(ISessionImplementor session, Object collection)
   at NHibernate.Impl.WrapVisitor.ProcessArrayOrNewCollection(Object collection, PersistentCollectionType collectionType)
   at NHibernate.Impl.WrapVisitor.ProcessCollection(Object collection, PersistentCollectionType collectionType)
   at NHibernate.Impl.AbstractVisitor.ProcessValue(Object value, IType type)
   at NHibernate.Impl.WrapVisitor.ProcessValues(Object[] values, IType[] types)
   at NHibernate.Impl.SessionImpl.DoSave(Object theObj, Key key, IClassPersister persister, Boolean replicate, Boolean useIdentityColumn, CascadingAction cascadeAction, Object anything)
   at NHibernate.Impl.SessionImpl.DoSave(Object obj, Object id, IClassPersister persister, Boolean useIdentityColumn, CascadingAction cascadeAction, Object anything)
   at NHibernate.Impl.SessionImpl.SaveWithGeneratedIdentifier(Object obj, CascadingAction action, Object anything)
 I can't figure out of me what's wrong with this stuff.... :(