当将对象从一个集合移动到另一个集合并且级联设置为 all-delete-orphan 时,出现以下异常:
删除的对象将通过级联重新保存(从关联中删除删除的对象)
我认为当您使用 all-delete-orphan 时,nhibernate 不会删除在另一个集合中引用的对象。
任何人都可以确认,当您有像文件夹这样包含文件夹或文件的对象,并且您将文件从一个文件夹移动到另一个文件夹时,您不应该遇到此异常吗?
我在 vs2010 中制作了一个示例项目来演示这种行为。谁能说我的映射是否正确或者 nhibernate 中是否存在错误?
文件映射.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");
}
}
文件夹映射.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 http://www.mediafire.com/?orxcw63aziq54xo指示:
- 确保项目属性中的连接字符串正确
- 运行项目
- 单击第一个按钮:连接到数据库
- 单击右上角按钮创建表和示例数据(2 个文件夹对象和 1 个文件)
- 单击按钮将文件对象移动到其他文件夹对象
- 单击按钮以保留机会:您将收到“已删除对象异常”