2012-05-23 9 views
15
この例外

:カウントでこのSqlParameterCollectionのため:カウントでこのSqlParameterCollectionの無効率n =

無効なインデックスn =

通常重複マッピング情報でポイントが(スタックオーバーフロー+グーグルを参照してください)。私は誰も持っていないと確信しています。他に理由がありますか?

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

[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"); 
     } 
    } 
+1

私はグーグルで検索しました(質問を参照)!!!S#arpリポジトリを介したエンティティの単純なSave()であるため、HQLは関係ありません。 – cs0815

+0

私は完全な例外(exception.ToString())を再投稿し、関連するマッピングを投稿するだけで確実です。 –

+0

問題のエンティティの完全なマッピングを確認する必要があります。 – Rippo

答えて

41

答えはどちらかである: -

A)あなたは

Bと同じクラスにマッピングされた重複したプロパティを持ちます)外部キーを公開している場合、および関連するエンティティに<many-to-one ...を使用すると可能ですマッピングファイルのy。このような場合は、外部キーのプロパティにinsert="false" and update="false"を追加してもう一度実行してください。

これを確認するには、流暢とオートマッピングを使用しているので、XMLマッピングを調べる必要があります。この[link] [2]を参照し、ExportTo(..)メソッドを使用してください。一度、XMLを見て、重複したプロパティがあるのか​​、マッピングファイルが重複していないか確認してください。私はあなたがIdクラスのプロパティに注釈[DocumentId]を設定することはできませんそれを取る

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

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

はあなたのケースでは、列GIへの2つの参照を持っています。私はこのクラスの自動マッピングを断念し、手動で流暢に構成する必要があるかもしれないと思います!

+0

@bartoszKPは編集していないため、これはあまりうまく読みません:) – Rippo

+0

あなたの投稿を混乱させるため、申し訳ありません。私の意図は、歴史的な騒音なしで完全な答えにすることでした。それは私にとっては役に立ちましたが、すべてのPPSをナビゲートするのは少し難しかった;)今はどうですか?もちろん、投稿をさらに改善することができます。特に答えが欲しいものがまだ不足している場合は、特に気をつけてください:) – BartoszKP

0

私のFluent IAutoMappingOverrideクラスにはマッピングがありますが、このエラーがありました.IgnoreProperty(p => Property)ここでPropertyはゲッターだけです。私はIgnoreMapステートメントを削除し、それを修正しました。これはNH 3.3.1.4にあります。おそらく、あなたの問題には関係しませんが、うまくいけば、これは他の誰かを助けるでしょう。 @Rippo、私を助け流暢NHibernateので同等の答えへの完全な信用と

3

です:クラスの場合

public class User 
{ 
    public virtual Department {get; set;} 
} 

public class Department 
{ 
    public virtual ICollection<User> Users {get; set;} 
} 

あなたはUserエンティティの次のマッピングを使用している場合:

//Problem mapping 
Map(x => x.DepartmentId)   
References(x => x.Department) 
    .Column("Id") 
    .ForeignKey("DepartmentId") 
    .Fetch.Join(); 

以下は可能な解決策の1つです(one-to-many部分のダブルマッピングのため - one-Department-to-many-Users):

// !Solution 
Map(x => x.DepartmentId)   
References(x => x.Department) 
    .Column("Id") 
    .ForeignKey("DepartmentId") 
    .Fetch.Join() 
    .Not.Insert() // <- added this 
    .Not.Update(); // <- and this 
関連する問題