При перемещении объекта из одной коллекции в другую и когда для каскада установлено значение all-delete-orphan, я получаю следующее исключение:
удаленный объект будет повторно сохранен каскадом (удалить удаленный объект изассоциации)
Я думал, что nhibernate не будет удалять объект, когда на него ссылаются в другой коллекции, когда вы используете all-delete-orphan.
Может кто-нибудь подтвердить это, когда у вас есть такие объекты, как папкикоторые содержат папки или файлы, и вы перемещаете файл из одной папки в другую, вы не должны получить это исключение?
Я сделал пример проекта в vs2010, который демонстрирует это поведение.Кто-нибудь может сказать, правильны ли мои сопоставления или если в nhibernate есть ошибка?
FileMapping.cs
public class FileMapping: ClassMap<File>
{
public FileMapping()
{
Id(x => x.Id, "Id").GeneratedBy.Native("File_seq");
Map(x => x.Name, "Name").Not.Nullable();
References(x => x.Folder).Not.Nullable().Column("idFolder");
}
}
FolderMapping.cs
public class FolderMapping: ClassMap<Folder>
{
public FolderMapping()
{
Id(x => x.Id, "Id").GeneratedBy.Native("Folder_seq");
Map(x => x.Name, "Name").Not.Nullable();
HasMany(x => x.Folders).Inverse().Cascade.AllDeleteOrphan().KeyColumn("idParentFolder");
HasMany(x => x.Files).Inverse().Cascade.AllDeleteOrphan().KeyColumn("idFolder");
References(x => x.ParentFolder).Nullable().Column("idParentFolder");
}
}
Пример проекта:http://www.mediafire.com/?orxcw63aziq54xo Инструкции:
- убедитесь, что строка подключения в свойствах проекта верна
- запустить проект
- нажмите 1-ую кнопку: подключиться к базе данных
- нажмите верхнюю правую кнопку, чтобы создать таблицы и образцы данных (2 объекта папки и 1 файл)
- нажмите кнопку, чтобы переместить объект файла в другой объект папки
- нажмите кнопку, чтобы сохранить шансы: вы будетеполучить исключение DeletedObjectException