0

我有这个用于 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 对象在数据库中被软删除(它在数据库中保持不变)。有谁知道为什么会这样?

4

1 回答 1

0

您是否尝试添加级联?Cascade.DeleteAllOrphan ?

NHibernate Cascades:实体与其他对象有关联,这可能是与单个项目的关联(多对一)或与集合的关联(一对多,多对任意)。无论如何,您可以告诉 NHibernate 自动遍历实体的关联,并根据级联选项进行操作。例如,使用 save-update 级联将未保存的实体添加到集合中将导致它与其父对象一起保存,而无需我们方面的任何明确说明。以下是每个级联选项的含义:

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

但是 cascade 会删除你的 orpahnd 记录,而不是“软删除”它。对于软删除,请查看此链接:NHibernate 中的软删除

于 2012-08-16T16:38:57.263 回答