この正確なタイトルは、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 を使用しています。
どんな洞察も大歓迎です!