【发布时间】:2011-08-11 06:00:07
【问题描述】:
当将对象从一个集合移动到另一个集合并且级联设置为 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 说明:
- 确保项目属性中的连接字符串正确
- 运行项目
- 点击第一个按钮:连接数据库
- 点击右上角按钮创建表格和样本数据(2个文件夹对象和1个文件)
- 单击按钮将文件对象移动到其他文件夹对象
- 点击按钮保持机会:你会得到 DeletedObjectException
【问题讨论】:
-
无论您是在移动文件夹还是文件,是否都会出现异常,还是仅在尝试将文件夹移动到其他文件夹时发生?
-
@jay:当我将文件移动到另一个文件夹时出现错误,但还记得在将文件夹移动到另一个文件夹时看到此异常。但是,在我的应用程序中,不再支持这种情况,因此该错误不再显示。 @vadim:用链接和说明更新帖子
标签: c# nhibernate exception fluent-nhibernate nhibernate-mapping