例外情况:
具有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"); } }
答案是:
a)您在相同的类中映射了一个重复的属性
b)如果<many-to-one ...要向映射文件中的相关实体公开外键并使用a ,则是可能的。如果是这种情况,请添加 insert="false" and update="false"到外键属性,然后再次运行。
<many-to-one ...
insert="false" and update="false"
为了验证这一点,在使用流利和自动映射时,您需要查看XML映射。请参阅此[link] [2]和使用ExportTo(..)方法。完成此操作后XML,请查看,看看是否有重复的属性,甚至没有重复的映射文件。
ExportTo(..)
XML
在这种情况下,您有两个对column的引用GI:
GI
<id name="Id" ...> <column name="GI" /> <generator class="assigned" /> </id> <property name="GI" ...> <column name="GI" /> </property>
我认为您不能[DocumentId]在Idclass属性上设置注释。我认为您可能需要放弃此类的自动映射,并通过流畅的手动配置!
[DocumentId]
Id