19

この例外:

Count= のこの SqlParameterCollection の無効なインデックス n

通常、重複するマッピング情報を指します (Stack Overflow + Google を参照)。私は何も持っていないと確信しています。それ以外の理由はありますか?

問題を特定したようです。私はこれを紹介しました:

[DocumentId]
public virtual int GI
{
    get { return base.Id; }
    protected set { base.Id = value; }
} 

lucene.net 経由で検索を使用するには。これはFNHに干渉するようです!ここでのオプションは何ですか?

PS:

at System.Data.SqlClient.SqlParameterCollection.RangeCheck(Int32 index)
   at System.Data.SqlClient.SqlParameterCollection.GetParameter(Int32 index)
   at System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item(Int32 index)
   at NHibernate.Type.Int32Type.Set(IDbCommand rs, Object value, Int32 index)
   at NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, Object value, Int32 index)
   at NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, Object value, Int32 index, ISessionImplementor session)
   at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index)
   at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session)
   at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Object obj, ISessionImplementor session)
   at NHibernate.Action.EntityInsertAction.Execute()
   at NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
   at NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
   at NHibernate.Engine.ActionQueue.ExecuteActions()
   at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)
   at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)
   at NHibernate.Impl.SessionImpl.Flush()
   at SharpArch.Data.NHibernate.DbContext.CommitChanges()
   at Updater1.Program.Main(String[] args) in C:\Users\bla\Documents\Visual Studio 2010\Projects\Bla\Updater1\Program.cs:line 97

PPS:

public class MappedSequenceMap : IAutoMappingOverride<MappedSequence>
    {
        public void Override(AutoMapping<MappedSequence> mapping)
        {
            mapping.Id(x => x.Id, "GI").GeneratedBy.Assigned();

            mapping.Map(x => x.Affiliation).Length(10000);
            mapping.Map(x => x.Gene).Length(10000);
            mapping.Map(x => x.OriginalIsolationCountry).Length(10000);
            mapping.Map(x => x.OriginalAffiliation).Length(10000);
            mapping.Map(x => x.PMIDs).Length(10000);
            mapping.Map(x => x.Product).Length(10000);
            mapping.Map(x => x.Fasta).Length(10000);
            mapping.Map(x => x.Note).Length(10000);
            mapping.Map(x => x.Strain).Length(10000);

            mapping.HasManyToMany(x => x.PubmedPublications).Table("SequencesPubmedPublications");
        }
    }
4

3 に答える 3

55

答えは次のいずれかです。

a) 同じクラスに重複したプロパティがマップされている

b) 外部キーを公開<many-to-one ...し、マッピング ファイル内の関連エンティティに a を使用している場合に可能です。この場合は insert="false" and update="false"、外部キー プロパティに追加して、再度実行してください。

これを確認するには、流暢で自動マッピングを使用しているため、XML マッピングを確認する必要があります。この[リンク][2]を参照して、ExportTo(..)メソッドを使用してください。これを行ったら、XMLを見て、重複するプロパティや重複するマッピング ファイルがあるかどうかを確認します。

あなたの場合、 column への参照が 2 つありますGI

<id name="Id" ...>
  <column name="GI" />
  <generator class="assigned" />
</id>

<property name="GI" ...>
  <column name="GI" />
</property>

クラスプロパティに注釈[DocumentId]を設定できないと思います。Idこのクラスの自動マッピングを放棄し、流れるように手動で構成する必要があるかもしれません!

于 2012-05-23T12:34:42.797 に答える
1

Fluent IAutoMappingOverride クラスで、Property が単なるゲッターである mapping.IgnoreProperty(p => Property) を持っていたときに、このエラーが発生しました。IgnoreMap ステートメントを削除して修正しました。これは NH 3.3.1.4 です。おそらくあなたの問題とは関係ありませんが、これが他の人の助けになることを願っています.

于 2015-03-11T04:07:16.030 に答える