2012-05-23 4 views
15

यह अपवाद:कुख्यात: गणना के साथ इस SqlParameterCollection के लिए अमान्य सूचकांक एन =

गणना के साथ इस SqlParameterCollection के लिए अमान्य सूचकांक एन =

आमतौर पर डुप्लिकेट मैपिंग जानकारी पर बताते हैं (देखें स्टैक ओवरफ़्लो + गूगल)। मुझे पूरा यकीन है कि मेरे पास कोई नहीं है। क्या इसके लिए कोई अन्य कारण हैं?

मुझे लगता है कि समस्या की पहचान हुई है। मैंने इसे पेश किया:

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

lucene.net के माध्यम से खोज का उपयोग करने के लिए। ऐसा लगता है कि एफएनएच में हस्तक्षेप होता है! मेरे लिए यहां क्या विकल्प हैं?

पुनश्च:

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 

पी पी एस:

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

मैंने कहा कि मैंने गुगल किया और एसओ (प्रश्न देखें) की खोज की !!!इसमें कोई एचक्यूएल शामिल नहीं है क्योंकि यह एक एस # एआरपी भंडार के माध्यम से एक इकाई का एक सरल सहेजें() है। – cs0815

+0

मैं पूर्ण अपवाद (अपवाद। टॉस्ट्रिंग()) दोबारा पोस्ट करूंगा और सुनिश्चित करने के लिए प्रासंगिक मैपिंग पोस्ट करूँगा। –

+0

आपके संपादन के कारण – Rippo

उत्तर

41

जवाब है या तो: -

क) यदि कोई डुप्लीकेट संपत्ति एक ही कक्षा

ख में मैप किया है) यह संभव है यदि आप विदेशी कुंजी को उजागर कर रहे हैं और साथ ही <many-to-one ... का उपयोग संबंधित हकदार मैपिंग फ़ाइल में वाई। यदि यह मामला विदेशी कुंजी संपत्ति में insert="false" and update="false" जोड़ें और फिर से चलाएं।

यह सत्यापित करने के लिए, क्योंकि आप धाराप्रवाह और स्वैपिंग का उपयोग कर रहे हैं, आपको XML मैपिंग को देखने की आवश्यकता है। यह [लिंक] [2] देखें और ExportTo(..) विधि का उपयोग करें। एक बार जब आप इसे XML पर देखते हैं और देखें कि क्या आपके पास कोई डुप्लिकेट गुण हैं या यहां तक ​​कि डुप्लिकेट मैपिंग फ़ाइलें भी हैं।

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

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

मैं इसे ले आप Id वर्ग संपत्ति पर एनोटेशन [DocumentId] निर्धारित नहीं कर सकते:

आप मामले में, आप स्तंभ GI को दो संदर्भों की है। मुझे लगता है कि आपको इस कक्षा के लिए ऑटो मैपिंग छोड़ने और मैन्युअल रूप से धाराप्रवाह के माध्यम से कॉन्फ़िगर करने की आवश्यकता हो सकती है!

+0

@bartoszKP में इकाई के लिए पूर्ण मैपिंग देखने की आवश्यकता है, यह अब बहुत अच्छी तरह से पढ़ा नहीं जाता है :) – Rippo

+0

क्षमा करें, आपकी पोस्ट को भ्रमित करने के लिए। मेरा इरादा किसी भी ऐतिहासिक शोर के बिना इसे पूरा जवाब देना था। यह मेरे लिए सहायक था, लेकिन सभी पीपीएस के माध्यम से नेविगेट करना थोड़ा मुश्किल था;) अब यह कैसा है? निस्संदेह पोस्ट को और भी बेहतर बनाने में संकोच न करें, खासकर यदि मैं अभी भी याद कर रहा हूं कि आप उत्तर में क्या कहना चाहते हैं :) – BartoszKP

0

मुझे यह त्रुटि मिली थी जहां मेरे फ्लुएंट IAutoMappingOverride कक्षा में मेरे पास मैपिंग थी। इग्नोरप्रोपर्टी (पी => संपत्ति) जहां संपत्ति केवल एक गेटर थी। मैंने IgnoreMap कथन हटा दिया और इसे ठीक कर दिया। यह एनएच 3.3.1.4 के साथ है। शायद आपकी समस्या से संबंधित नहीं है, लेकिन उम्मीद है कि यह किसी और की मदद करेगा।

3
@Rippo को पूरा श्रेय साथ

, धाराप्रवाह NHibernate में बराबर जवाब जो मुझे मदद की है:

कक्षाओं के लिए:

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(); 

निम्नलिखित संभावित समाधानों में से एक है (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 
संबंधित मुद्दे

 संबंधित मुद्दे