NHibernate, un objet différent avec le même identifiant de la valeur a déjà été associé à la session

J'ai travaillé avec NHibernate, à l'aide de Fluent NHibernate pour la cartographie. J'ai résolu beaucoup de problèmes, et a commencé à penser à moi-même vécu dans nhibernate.
Cependant, cette erreur est assez étrange.

C'est mon modèle:

    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; }
    }

Et ma cartographie

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

Ici où l'exception se produit:

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
    }
}

Les détails de l'exception:

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)

Id générateur de bases de données axées sur l'auto-incrémentation de l'id du générateur. (pas de hilo ou autre). NHibernate version 3.2.0 .

J'ai essayé de surcharger d'égal à Égal et GetHashCode, pas de chance.

La UnitOfWork modèle que je suis en utilisant la nécessite de ne pas valider une transaction ou une couleur session intérieur de la boucle foreach. NHibernate dit qu'il y a un autre objet avec le même id, mais tout ce que je suis en train de faire est d'insérer un nouvel objet, qui n'ont pas d'identifiant à tous.

Je suis en utilisant la même structure de mon projet, et il fonctionne bien partout, mais ce. Je suis à soupçonner qu'il pourrait être à cause de "Contenu" de la propriété, qui est un texte et une grande chaîne.

Ce qui me manque ici? Ou NHibernate manque de quelque chose?

Dans votre cartographie, vous avez ClassMap<MessageNew>, mais en montrant la classe Message est-ce une faute de frappe?
Oui, Effectivement c'est "MessageNew". Merci pour l'avertissement, j'ai édité le post.
jamais vous comprendre cela?
Je me demande si il y a un FluentNH convention appliqués qui est en train de changer le générateur pour "attribué".

OriginalL'auteur SadullahCeran | 2012-03-12