2012-07-19 39 views
1

这个确切的标题可以在谷歌或这里在stackflow.com多次发现,但我得到这个错误的原因是像他们都没有:我在单位没有问题测试代码,但应用程序中完全相同的代码会导致此问题。我希望这是因为制图问题。这个SqlParameterCollection的计数= 13的索引13无效

这里是我的映射:

 <?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的测试工作正常,但在应用程序中保存()引起的“Count = N的SqlParameterCollection的索引N无效”异常。

我使用的是NH 3.0,C#3.5,SQL Server 2008 R2。

任何洞察力非常感谢!

+0

你说它在单元测试中运行良好...是否与同一个数据库相反?使用相同的_provider? – Goblin 2012-07-22 19:57:54

回答

1

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

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

3

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

+0

感谢Graig,为您的快速反应。我希望是这种情况,但正如你从我发布的映射中可以看到的那样,没有字段映射两次。最让我困扰的是,单元测试中相同的代码运行良好。 – John 2012-07-19 03:55:06

+0

或者您正在添加相同的映射文件两次。 – Rippo 2012-07-19 13:44:49

+0

没有。我加倍检查了一切。 – John 2012-07-19 22:52:59