2012-07-19 44 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