title: NHibernate Error Message: Invalid index 3 for this SqlParameterCollection with Count=3
body: <p>I have a test database design like this:
  <img src="https://i.stack.imgur.com/dfJo9.png" alt="enter image description here"></p>
  
  <p>The following is the pseudo-code:</p>
  
  <pre><code>//BhillHeader
  public class BillHeader
  {
      public BillHeader()
      {
          BillDetails = new List&lt;BillDetail&gt;();
      }
      public virtual int BillNo { get; set; }
      public virtual IList&lt;BillDetail&gt; BillDetails { get; set; }
      public virtual decimal Amount { get; set; }
  
      public virtual void AddDetail(BillDetail billdet)
      {
          BillDetails.Add(billdet);
      }
  }  
  
  //BillHeader Map
  public class BillHeaderMap : ClassMap&lt;BillHeader&gt;
  {
  
      public BillHeaderMap()
      {
          Table("BillHeader");
          LazyLoad();
          Id(x =&gt; x.BillNo).GeneratedBy.Identity().Column("BillNo");
          Map(x =&gt; x.Amount).Column("Amount").Not.Nullable();
          HasMany(x =&gt; x.BillDetails).KeyColumn("BillNo").Cascade.All().Inverse();
      }
  }  
  
  //BillDetail
  public class BillDetail
  {
      public BillDetail() { }
      public virtual int BillID { get; set; }
      public virtual int SeqNo { get; set; }
      public virtual BillHeader BillHeader { get; set; }
      public virtual decimal Amt { get; set; }
  
      public override bool Equals(object obj)
      {
          var other = obj as BillDetail;
  
          if (ReferenceEquals(null, other)) return false;
          if (ReferenceEquals(this, other)) return true;
  
          return this.BillID == other.BillID &amp;&amp;
              this.SeqNo == other.SeqNo;
      }
  
      public override int GetHashCode()
      {
          unchecked {
              int hash = GetType().GetHashCode();
              hash = (hash * 31) ^ SeqNo.GetHashCode();
              hash = (hash * 31) ^ BillID.GetHashCode();
  
              return hash;
          }
      }
  }
  
  
  //BillDetail Map
  public class BillDetailMap : ClassMap&lt;BillDetail&gt;
  {
  
      public BillDetailMap()
      {
          Table("BillDetail");
          LazyLoad();
          CompositeId().KeyProperty(x =&gt; x.BillID, "BillNo").KeyProperty(x =&gt; x.SeqNo, "SeqNo");
          References(x =&gt; x.BillHeader).Column("BillNo");
          Map(x =&gt; x.Amt).Column("Amt").Not.Nullable();
      }
  }
  
  
  //-----------------------------------------------------------------------------------------------------------------------------
  
  //Program
  public createBillNo()
  {
      var sessionFactory = CreateSessionFactory();
      using (var session = sessionFactory.OpenSession()) {
          using (var sqlTrans = session.BeginTransaction()) {
  
              BillHeader billNo1 = new BillHeader() { Amount = 2500.00M};
              BillDetail bh11 = new BillDetail() { SeqNo = 1, Amt = 200.00M };
              BillDetail bh12 = new BillDetail() { SeqNo = 2, Amt = 300.00M };
              BillDetail bh13 = new BillDetail() { SeqNo = 3, Amt = 500.00M };
  
              AddBillDetailsToBillHeader(billNo1, bh11, bh12, bh13);
              session.SaveOrUpdate(billNo1); 
              sqlTrans.Commit();
          }
      }
  }
  
  private void AddBillDetailsToBillHeader(BillHeader billHeader, params BillDetail[] billDetails)
  {
      foreach (var billdet in billDetails) {
          billHeader.AddDetail(billdet);
          billdet.BillHeader = billHeader;
      }
  }
  </code></pre>
  
  <p>When I run this I'm getting the following exception:</p>
  
  <blockquote>
    <p>Invalid index 3 for this SqlParameterCollection with Count=3</p>
  </blockquote>
  
  <p>Please help me to resolve this issue.</p>