2010-04-12 38 views
9

में बदल दिया गया था, मुझे किसी डीबी में ऑब्जेक्ट को अपडेट करने का प्रयास करते समय निम्न त्रुटि मिल रही है। क्या किसी को पता है कि क्या हो रहा है? मैंने अपने सभी डेटाटाइप की जांच की है और वे डीबी में क्या है इसके अनुरूप हैं। कोई विचार के लिए धन्यवाद -xxx के उदाहरण के पहचानकर्ता को y से z

NHibernate.HibernateException was unhandled by user code 
    Message="identifier of an instance of DataTransfer.status was altered from 3 to 4" 
    Source="NHibernate" 
    StackTrace: 
     at NHibernate.Event.Default.DefaultFlushEntityEventListener.CheckId(Object obj, IEntityPersister persister, Object id, EntityMode entityMode) 
     at NHibernate.Event.Default.DefaultFlushEntityEventListener.GetValues(Object entity, EntityEntry entry, EntityMode entityMode, Boolean mightBeDirty, ISessionImplementor session) 
     at NHibernate.Event.Default.DefaultFlushEntityEventListener.OnFlushEntity(FlushEntityEvent event) 
     at NHibernate.Event.Default.AbstractFlushingEventListener.FlushEntities(FlushEvent event) 
     at NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions(FlushEvent event) 
     at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event) 
     at NHibernate.Impl.SessionImpl.Flush() 
     at NHibernate.Transaction.AdoTransaction.Commit() 
     at DataAccessLayer.NHibernateDataProvider.UpdateItem_temp(items_temp item_temp) in C:\Documents and Settings\Carl.PAMB\My Documents\Visual Studio 2008\Projects\InventoryDataClean\DataAccessLayer\NHibernateDataProvider.cs:line 226 
     at InventoryDataClean.Controllers.ImportController.Edit(Int32 id, FormCollection formValues) in C:\Documents and Settings\Carl.PAMB\My Documents\Visual Studio 2008\Projects\InventoryDataClean\InventoryDataClean\Controllers\ImportController.cs:line 101 
     at lambda_method(ExecutionScope , ControllerBase , Object[]) 
     at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
     at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
     at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
     at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() 
     at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) 
    InnerException: 

मेरी log4net लॉग से - यहाँ

item.status.id = Int32.Parse(formValues["Status"]); 
_provider.UpdateItem_temp(item); 

और मेरे डेटा प्रदाता से कोड है -

13:37:17 [9] DEBUG NHibernate.Event.Default.DefaultSaveOrUpdateEventListener - object already associated with session: [DataTransfer.items_temp#56876] 

इसके अलावा, यहाँ है, जहां यह कहा जाता है।

public void UpdateItem_temp(items_temp item_temp) 
{ 
    ITransaction t = _session.BeginTransaction(); 
    try 
    { 
     _session.SaveOrUpdate(item_temp); 
     t.Commit(); 
    } 
    catch (Exception) 
    { 
     t.Rollback(); 
     throw; 
    } 
    finally 
    { 
     t.Dispose(); 
    } 
} 

उत्तर

6

यह निश्चित रूप से गलत है:

item.status.id = Int32.Parse(formValues["Status"]); 

तुम एक स्थिति उदाहरण है, जो गैर कानूनी है की पहचान बदल रहे हैं।

इसके बजाय, यदि आप आइटम स्थिति बदलने के लिए कोशिश कर रहे हैं, तो आप यह कर किया जाना चाहिए:

item.status = session.Load<Status>(Int32.Parse(formValues["Status"])); 

(मैं अनुमान लगाया "स्थिति" स्थिति संपत्ति के प्रकार के रूप में, सही नाम के साथ बदलना) पहले भाग के लिए

+0

+1। हम वास्तव में दूसरे भाग के बारे में नहीं जानते हैं क्योंकि कोई डेटा ऑब्जेक्ट परिभाषा पोस्ट नहीं की गई थी, लेकिन यह समस्या के लिए काफी हद तक अप्रासंगिक है। –

+0

यह टिकट है - पूरी तरह से काम किया। धन्यवाद – czuroski

+0

+1। काश मैं इसे जल्द पाया। –

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