1

この正確なタイトルは、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; }
    }
}

新しいレコードを挿入するために使用するコード:

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

NUnit テストでは期待どおりに動作しますが、アプリケーションでは、save() によって「カウント = N のこの SqlParameterCollection のインデックス N が無効です」という例外が発生しました。

NH 3.0、C#3.5、SQL Server 2008 R2 を使用しています。

どんな洞察も大歓迎です!

4

2 に答える 2

3

通常、これは、エンティティに2回マップされたフィールドがあることを意味します。

于 2012-07-19T03:30:33.353 に答える