Nhibernate 此计数为13的SqlParameterCollection的索引13无效

Nhibernate 此计数为13的SqlParameterCollection的索引13无效,nhibernate,mapping,Nhibernate,Mapping,这个确切的标题可以在google或stackflow.com上找到很多次,但我得到这个错误的原因与它们都不一样:我在单元测试代码中没有问题,但应用程序中的完全相同的代码导致了这个问题。我希望这是因为映射问题 以下是我的映射: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="My.Domain" name

这个确切的标题可以在google或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; }
    }
}
在NUnit测试中,它按预期工作,但在应用程序中,保存导致此SqlParameterCollection的索引N无效,Count=N异常

我使用的是NH3.0、C3.5、SQLServer2008R2


非常感谢您的任何见解

通常这意味着您在实体中映射了两次字段

通常这意味着您在实体中映射了两次字段

谢谢你的提醒,@ps2goat。今天刚看到你的评论


这是映射问题,但不是因为数据库字段映射了两次。我以前经历过这个问题,但现在已经完全忘记了。问题与某些类型(如integer和datetime)的可空数据字段的映射方式有关。如果int或datetiem字段在db中可以为null,则相应的属性也必须设置为null。在C中,这是通过添加?属性的类型。希望这对某人有所帮助。

谢谢您的提醒,@ps2goat。今天刚看到你的评论


这是映射问题,但不是因为数据库字段映射了两次。我以前经历过这个问题,但现在已经完全忘记了。问题与某些类型(如integer和datetime)的可空数据字段的映射方式有关。如果int或datetiem字段在db中可以为null,则相应的属性也必须设置为null。在C中,这是通过添加?属性的类型。希望这对某人有所帮助。

感谢Graig的快速响应。我希望是这样,但正如您从我发布的映射中看到的,没有两次映射的字段。最让我烦恼的是,相同的代码在单元测试中运行良好。或者您添加了两次相同的映射文件。不。我仔细检查了一切。更新。这是映射问题,但不是因为数据库字段映射了两次。我以前经历过这个问题,但现在已经完全忘记了。问题与某些类型(如integer和datetime)的可空数据字段的映射方式有关。如果int或datetiem字段在db中可以为null,则相应的属性也必须设置为null。在C中,这是通过添加?属性的类型。希望这对某人有所帮助。@John,你应该把它作为一个单独的答案发布并接受它。这使人们能够快速确定您的问题已经找到了答案。感谢Graig,感谢您的快速回答。我希望是这样,但正如您从我发布的映射中看到的,没有两次映射的字段。最让我烦恼的是,相同的代码在单元测试中运行良好。或者您添加了两次相同的映射文件。不。我仔细检查了一切。更新。这是映射问题,但不是因为数据库字段映射了两次。我以前经历过这个问题,但现在已经完全忘记了。问题与某些类型(如integer和datetime)的可空数据字段的映射方式有关。如果int或datetiem字段在db中可以为null,则相应的属性也必须设置为null。在C中,这是通过添加?属性的类型。希望这对某人有所帮助。@John,你应该把它作为一个单独的答案发布并接受它。这使人们能够快速识别您的问题的答案。您说它在单元测试中运行良好。。。这是针对同一个数据库的吗?使用同一个_提供者?你说它在单元测试中运行良好。。。这是针对同一个数据库的吗?和同一个供应商?
 var reportFormFlag = new ReportFormFlag
            {
                ReportInstanceID = 3554,
                FormID = 25,
                SiteOrProjectID = 0,
                FlagComment = "test",
                IsFlagged = 1
            };
_provider.Save(reportFormFlag);