gpt4 book ai didi

NHibernate,具有相同标识符值的另一个对象已与该 session 关联

转载 作者:行者123 更新时间:2023-12-04 03:59:48 28 4
gpt4 key购买 nike

我一直在使用NHibernate,使用Fluent NHibernate进行映射。我解决了很多问题,并开始认为自己在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; }
}

还有我的 map
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)

ID生成器是数据库驱动的自动增量ID生成器。 (不是hilo或任何其他)。 NHibernate版本是3.2.0。

我试过重载Equals和GetHashCode,没有运气。

我使用的UnitOfWork模式不需要在foreach循环内提交事务或刷新 session 。 NHibernate说有另一个具有相同ID的对象,但是我要做的就是插入一个新对象,该对象根本没有任何标识符。

我在整个项目中都使用相同的结构,但除此以外,它在任何地方都适用。我怀疑这可能是由于“Content”属性的缘故,该属性是文本并设置为大字符串。

我在这里想念什么?还是NHibernate缺少了什么?

最佳答案

有时,当我们将对象分配给相同的新对象时,就会发生这种情况。因此,首先检查您的模型和 View 模型是否不相同。

关于NHibernate,具有相同标识符值的另一个对象已与该 session 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9676486/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com