您的位置:首页 > 移动开发 > Objective-C

A different object with the same identifier value was already associated with the session

2012-12-13 23:22 627 查看
这个错误非常诡异,把我搞死了要,查阅了很多资料,找到了Merge这个方法,那么开始改造代码:

IRepository接口添加Merge方法:

bool Add(TEntity entity);
bool Add(IEnumerable<TEntity> items);
bool Update(TEntity entity);
bool Delete(TEntity entity);
bool Delete(IEnumerable<TEntity> entities);
object Merge(TEntity entity);


GenericRepository实现其接口:

public object Merge(T entity)
{
return _session.Merge(entity);
}


Controller:

[HttpPost]
public ContentResult CreateAsync(Order order, FormCollection collection)
{
try
{
//order = new Order();
TryUpdateModel<Order>(order, "Order");
//UpdateModel<Order>(order, "Order");

UpdateRelationalModel(order, collection);

order.Operator = new CurrentUser().UserInfo;
order.State = OrderState.Active;
order.Status = true;
order = _orderRepository.Merge(order) as Order;
_orderRepository.Add(order);

_unitOfWork.Commit();

return Content("true");
}
catch (Exception ex)
{
_unitOfWork.Rollback();
_logger.Error("保存并继续新增订单发生错误!{0}", ex);

return Content("false");
}
}


这里抛出该异常是因为order.Operator对象引起的,使用了Merge方法来合并order对象后执行添加至数据库方法,Done!

It works!

NHibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 1, of entity: PekingHandicraftPMS.Data.Entities.User
在 NHibernate.Engine.StatefulPersistenceContext.CheckUniqueness(EntityKey key, Object obj) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\StatefulPersistenceContext.cs:行号 688
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformUpdate(SaveOrUpdateEvent event, Object entity, IEntityPersister persister) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:行号 227
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsDetached(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:行号 186
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:行号 69
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:行号 53
在 NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:行号 2626
在 NHibernate.Impl.SessionImpl.SaveOrUpdate(String entityName, Object obj) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:行号 548
在 NHibernate.Engine.CascadingAction.SaveUpdateCascadingAction.Cascade(IEventSource session, Object child, String entityName, Object anything, Boolean isCascadeDeleteEnabled) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\CascadingAction.cs:行号 249
在 NHibernate.Engine.Cascade.CascadeToOne(Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\Cascade.cs:行号 213
在 NHibernate.Engine.Cascade.CascadeAssociation(Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\Cascade.cs:行号 181
在 NHibernate.Engine.Cascade.CascadeProperty(Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\Cascade.cs:行号 148
在 NHibernate.Engine.Cascade.CascadeOn(IEntityPersister persister, Object parent, Object anything) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\Cascade.cs:行号 126
在 NHibernate.Event.Default.AbstractSaveEventListener.CascadeBeforeSave(IEventSource source, IEntityPersister persister, Object entity, Object anything) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\AbstractSaveEventListener.cs:行号 360
在 NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\AbstractSaveEventListener.cs:行号 224
在 NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\AbstractSaveEventListener.cs:行号 187
在 NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\AbstractSaveEventListener.cs:行号 119
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:行号 162
在 NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveEventListener.cs:行号 29
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:行号 148
在 NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveEventListener.cs:行号 21
在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Event\Default\DefaultSaveOrUpdateEventListener.cs:行号 53
在 NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:行号 2612
在 NHibernate.Impl.SessionImpl.Save(Object obj) 位置 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:行号 474
在 PekingHandicraftPMS.Data.NHibernate.Repository.GenericRepository`1.Add(T entity) 位置 E:\My Studio\Easecore\Peking Production Management System\trunk\PekingHandicraftMOS\PekingHandicraftMOS.Data.NHibernate\Repository\GenericRepository.cs:行号 24
在 PekingHandicraftPMS.Web.Controllers.OrderController.CreateAsync(Order order, FormCollection collection) 位置 E:\My Studio\Easecore\Peking Production Management System\trunk\PekingHandicraftMOS\PekingHandicraftMOS.Web\Controllers\OrderController.cs:行号 291
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐