से जुड़ा हुआ था, मैं मैपिंग के लिए फ़्लुएंट एनएचबर्ननेट का उपयोग करके एनएचबेर्नेट के साथ काम कर रहा हूं। मैंने कई मुद्दों को हल किया, और खुद को निबर्ननेट में अनुभवी के रूप में सोचने लगा। हालांकि, यह त्रुटि काफी अजीब है।NHibernate, एक ही पहचानकर्ता मान वाला एक अलग ऑब्जेक्ट पहले से ही
यह मेरा मॉडल है:
public class MessageNew
{
public virtual int Id { get; set; }
public virtual string Content { get; set; }
public virtual string Subject { get; set; }
public virtual User User { get; set; }
public virtual bool IsSent { get; set; }
public virtual string AmazonMessageId { get; set; }
}
और मेरे मानचित्रण
public class MessageNewMap : ClassMap<MessageNew>
{
public MessageNewMap()
{
Id(x => x.Id);
Map(x => x.Content).CustomSqlType("text");
Map(x => x.Subject);
Map(x => x.AmazonMessageId);
Map(x => x.IsSent);
References(x => x.User);
}
}
यहाँ
जहां अपवाद तब होता है:
foreach (var userToSend in usersToSend)
{
string body = MailHelper.BuildSomeBody()
if (userToSend != CurrentUser)
{
MessageNew message = new MessageNew
{
User = userToSend,
IsSent = false,
Content = body,
Subject = subject
};
session.Save(message); // Exception thrown
}
}
अपवाद विवरण:
NHibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 1779, of entity: Models.MessageNew
at NHibernate.Engine.StatefulPersistenceContext.CheckUniqueness(EntityKey key, Object obj)
at NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.Save(Object obj)
आईडी जनरेटर डेटाबेस संचालित ऑटो-वृद्धि आईडी जनरेटर है। (हिलो या कोई अन्य नहीं)। NHibernate संस्करण 3.2.0 है।
मैंने इक्वाल्स और गेटहाशकोड को अधिभारित करने की कोशिश की है, कोई भाग्य नहीं।
यूनिटऑफवर्क पैटर्न जो मैं उपयोग कर रहा हूं, फ़ोरैच लूप के अंदर लेनदेन या फ्लश सत्र नहीं करना आवश्यक है। NHibernate का कहना है कि एक ही आईडी के साथ एक और वस्तु है, लेकिन मैं जो कर रहा हूं वह एक नई वस्तु डालने वाला है, जिसमें कोई पहचानकर्ता नहीं है।
मैं अपने पूरे प्रोजेक्ट पर एक ही संरचना का उपयोग कर रहा हूं, और यह हर जगह अच्छी तरह से काम करता है लेकिन यह। मुझे संदेह है कि यह "सामग्री" संपत्ति के कारण हो सकता है, जो पाठ है और एक बड़ी स्ट्रिंग पर सेट है।
मुझे यहां क्या याद आ रही है? या NHibernate कुछ याद आ रही है?
आपके मानचित्रण में आपके पास 'क्लास मैप' है लेकिन वर्ग 'संदेश' दिखा रहा है यह एक टाइपो है? –
Rippo
हां, वास्तव में यह "संदेश नया" है। चेतावनी के लिए धन्यवाद, मैंने पोस्ट संपादित किया। – SadullahCeran
क्या आपने कभी यह पता लगाया है? – BueKoW