具有Count = 13的此SqlParameterCollection的索引13无效

时间:2012-07-19 03:18:34

标签: nhibernate mapping

这个确切的标题可以在谷歌或者在这里的stackflow.com上找到很多次,但我得到这个错误的原因就像它们一样:我在单元测试代码中没有问题但在应用程序中完全相同的代码导致这个问题。我希望这是因为映射问题。

这是我的映射:

     <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="My.Domain" namespace="My.Domain">
      <class name="My.Domain.ReportFormFlag, My.Domain" table="ReportFormFlag" schema="Core">
        <id name="FlagID">
          <column name="FlagID" sql-type="uniqueidentifier" not-null="true"/>
          <generator class="guid"/>
        </id>
        <property name="ReportInstanceID" column="ReportInstanceID" type="int" not-null="true"/>
        <property name="FormID" column="FormID" type="int" not-null="true"/>
        <property name="SiteOrProjectID" column="SiteOrProjectID" type="int" not-null="true"/>
        <property name="IsFlagged" column="IsFlagged" type="int" not-null="true"/>
        <property name="FlagComment" column="FlagComment" type="string" not-null="false"/>
      </class>
    </hibernate-mapping>

and here is my class

namespace My.Domain
{
    [Serializable]
    public class ReportFormFlag
    {
        public virtual Guid FlagID { get; set; }    
        public virtual int ReportInstanceID { get; set; }
        public virtual int FormID { get; set; }
        public virtual int SiteOrProjectID { get; set; }
        public virtual int IsFlagged { get; set; }
        public virtual string FlagComment { get; set; }
    }
}

我用来插入新记录的代码:

 var reportFormFlag = new ReportFormFlag
            {
                ReportInstanceID = 3554,
                FormID = 25,
                SiteOrProjectID = 0,
                FlagComment = "test",
                IsFlagged = 1
            };
_provider.Save(reportFormFlag);

在NUnit测试中,它按预期工作,但在应用程序中,save()导致“此SqlParameterCollection的无效索引N与Count = N”异常。

我正在使用NH 3.0,C#3.5,SQL Server 2008 R2。

非常感谢任何见解!

2 个答案:

答案 0 :(得分:3)

通常,这意味着您在实体中有两次映射的字段。

答案 1 :(得分:1)

感谢提醒,@ ps2goat。刚刚看到你的评论!

这是映射问题,但不是因为数据库字段映射了两次。我以前经历过这个问题,但忘了一切。该问题与如何映射某些类型(如整数和日期时间)的可空数据字段有关。如果int或datetiem的字段在db中可以为空,则相应的属性也必须设置为可为空。在C#中,通过添加&#34;?&#34;来实现。到属性的类型。希望这有助于某人。