私はすべての投稿を読み、列が2回参照されているためにIndexOutOfRangeが通常発生することを知っています。しかし、私のマッピングに基づいて、それがどのように起こっているのかわかりません。構成でSHOW_SQLがtrueの場合、テーブルへの挿入が表示され、Events
次にテーブルをIndexOutOfRangeException
参照するが表示されRadioButtonQuestions
ます。例外を生成するために使用しようとしているSQLが表示されません。AutoMappingを使用しClassMap
てみましたが、問題を絞り込むために、これら2つのクラスをフルに切り替えました。
public class RadioButtonQuestion : Entity
{
[Required]
public virtual Event Event { get; protected internal set; }
[Required]
public virtual string GroupIntroText { get; set; }
}
public class Event : Entity
{
[Required]
public virtual string Title { get; set; }
[Required]
public virtual DateTime EventDate { get; set; }
public virtual IList<RadioButtonQuestions> RadioButtonQuestions { get; protected internal set; }
}
public class RadioButtonQuestionMap : ClassMap<RadioButtonQuestion>
{
public RadioButtonQuestionMap()
{
Table("RadioButtonQuestions");
Id(x => x.Id).Column("RadioButtonQuestionId").GeneratedBy.Identity();
Map(x => x.GroupIntroText);
References(x => x.Event).Not.Nullable();
}
}
public class EventMap : ClassMap<Event>
{
public EventMap()
{
Id(x => x.Id).Column("EventId").GeneratedBy.Identity();
Map(x => x.EventDate);
Map(x => x.Title);
HasMany(x => x.RadioButtonQuestions).AsList(x => x.Column("ListIndex")).KeyColumn("EventId").Not.Inverse().Cascade.AllDeleteOrphan().Not.KeyNullable();
}
}
生成されたSQLは正しく見えます:
create table Events (
EventId INT IDENTITY NOT NULL,
EventDate DATETIME not null,
Title NVARCHAR(255) not null,
primary key (EventId)
)
create table RadioButtonQuestions (
RadioButtonQuestionId INT IDENTITY NOT NULL,
GroupIntroText NVARCHAR(255) not null,
EventId INT not null,
ListIndex INT null,
primary key (RadioButtonQuestionId)
)
これは、NH3.3.0.4000およびFNH1.3.0.727を使用しています。(RadioButtonQuestionを添付して)新しいイベントを保存しようとすると、次のように表示されます。
NHibernate:INSERT INTO Events(EventDate、Title)VALUES(@ p0、@ p1); @ p0 = 5/21/2012 12:32:11 PM [Type:DateTime(0)]、@ p1 ='My Test Event' [タイプ:文字列(0)] NHibernate:@@IDENTITYを選択
Events.Tests.Events.Tasks.EventTasksTests.CanCreateEvent:NHibernate.PropertyValueException:Events.Domain.RadioButtonQuestion._Events.Domain.Event.RadioButtonQuestionsIndexBackrefのプロパティ値の脱水エラー----> System.IndexOutOfRangeException:ParameterIndex「3」のSqlCeParameterこのSqlCeParameterCollectionには含まれていません。
したがって、列が実際に2回参照されている場合、その動作を引き起こしているFNH構成の問題は何ですか?私は注文との双方向関係(1つのイベントに多くのラジオボタンの質問があります)を試みています(私が読んだことから、NHは双方向関係にないのでそれを維持します)。FWIWEvent
からRadioButtonQuestion
を削除して一方向の関係としてこれも試しましたが、それでも同じ例外が発生しました。