это действительно сумасшедший сейчас. Я пытаюсь удалить некоторые объекты, которые имеют иерархические отношения друг с другом, но каким-то образом NHibernate (или ActiverRecord) сначала обновляет отношения (foreigen keys), а затем пытается удалить в той же транзакции, но удаление не удается из-за проверки параллелизма ( оптимистическая блокировка всего).
Псевдокод моих занятий:
[ActiveRecord]
public class Box : ActiveRecordBase
{
[PrimaryKey]
public virtual int BoxId{get;set;}
[BelongsTo]
public virtual Box TopLevelBox{get;set;}
[BelongsTo]
public virtual Box Parent {get;set;}
[HasMany]
public virtual IList<Box> Children {get;set;}
[HasMany]
public virtual IList<Content> Conten{get;set;}
}
[ActiveRecord]
public class Content : ActiveRecordBase
{
[PrimaryKey]
public virtual int ContentId{get;set;}
[BelongsTo]
public virtual Box Box{get;set;}
}
У меня есть 3 коробки и 3 содержимого. Я пытаюсь описать структуру:
Box1.Parent = null;
Box1.TopLevelBox = Box1;
Box1.Children = {Box2,Box3};
Box1.Content = {Conten1};
Box2.Parent = Box1;
Box2.TopLevelBox = Box1;
Box2.Children = {};
Box2.Content = {Content2};
Box3.Parent = Box1;
Box3.TopLevelBox = Box1;
Box3.Children = {};
Box3.Content = {Content3};
Content3.Box = Box3;
Content2.Box = Box2;
Content1.Box = Box1;
Когда я разрешаю вывод NHibernate, он делает следующие глупые вещи:
UPDATE box1 SET toplevelbox = NULL WHERE [optimistic locking all checks];
UPDATE box2 SET parent = NULL, toplevelbox = NULL WHERE [optimistic locking all checks];
UPDATE box3 SET parent = NULL, toplevelbox = NULL WHERE [optimistic locking all checks];
UPDATE content1 SET box = NULL WHERE [optimistic locking all checks];
UPDATE content2 SET box = NULL WHERE [optimistic locking all checks];
UPDATE content3 SET box = NULL WHERE [optimistic locking all checks];
DELETE box1 WHERE [optimistic locking all checks but with] AND topleveobox = box1;
// Of cause this last check fails and my transaction get's a rollback
Что здесь вононг? Как остановить NHibernat (или ActiveRecord) от таких глупых обновлений?
Я действительно отчаялся и мне нужна помощь.
Привет
Juy Juka