сейчас это действительно сумасшедшее. Я пытаюсь удалить некоторые объекты, которые имеют хирачические отношения друг с другом, но каким-то образом NHibernate (или ActiverRecord) сначала обновляет отношения (foreigen keys), а затем пытается удалить в одной транзакции, но удаление не выполняется из-за проверки параллелизма (оптимистичная блокировка всех).NHibernate/Castle.ActiveRecord; delete не работает, потому что строка была обновлена в той же транзакции
ПСЕВДОКОД из моих классов:
[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 Содержание. Я пытаюсь описать strucutre:
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
Что worong здесь? Как остановить NHibernat (или ActiveRecord) от выполнения этих глупых обновлений?
Я действительно отчаялся и нуждаюсь в помощи.
Приветствия
Juy Juka