NHibernate:Laziness.NoProxy阻止软删除

时间:2012-08-16 15:31:19

标签: c# asp.net nhibernate proxy lazy-evaluation

我有一个NHibernate映射:

    public AnswerSet_AnswerMap() {
        Table("DB.AnswerSet_Answer");
        Id(x => x.AnswerSet_AnswerId);
        References(x => x.Answer, "BaseAnswerID").LazyLoad(Laziness.NoProxy);
        References(x => x.AnswerSet, "AnswerSetID").Fetch.Join();
        Map(x => x.Format);
    }

用于“AnswerSet”和“Answer”之间的联结表。答案引用上的.LazyLoad(Laziness.NoProxy)在我们的应用程序中是必需的,但它可以防止在数据库中软删除AnswerSet_Answer对象(它保持在数据库中不变)。有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

您尝试添加级联吗? Cascade.DeleteAllOrphan?

NHibernate Cascades: 实体与其他对象有关联,这可能是与单个项目(多对一)的关联或与集合的关联(一对多,多对多)。 无论如何,您可以告诉NHibernate自动遍历实体的关联,并根据级联选项执行操作。例如,将未保存的实体添加到具有保存更新级联的集合将导致它与其父对象一起保存,而不需要我们方面的显式指令。 以下是每个级联选项的含义:

none - 不做任何级联,让用户自己处理它们。 save-update - 保存/更新对象时,检查关联并保存/更新任何需要它的对象(包括在多对多方案中保存/更新关联)。 delete - 删除对象时,删除关联中的所有对象。 delete-orphan - 删除对象时,删除关联中的所有对象。除此之外,当从关联中删除对象而不与另一个对象(孤立对象)关联时,也删除它。 all - 当对象保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。 all-delete-orphan - 当一个对象被保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。除此之外,当一个对象从关联中删除而不与另一个对象(孤立对象)相关联时,也将其删除。

但是级联将删除你的orpahnd记录,而不是“软删除”它。 对于软删除,请查看此链接:Soft Deletes In NHibernate