免责声明:我是 NHibernate 菜鸟,所以希望这个问题是有道理的。我在两个类之间有一个多对多的关系,比如……
public class Entity1
{
public virtual Guid EntityId { get; set; }
public virtual IList<Entity2> Entity2List;
}
Public class Entity2
{
public virtual Guid EntityId { get; set; }
public virtual IList<Entity1> Entity1List;
}
我在两个类映射中都添加了一个包的多对多关系,定义了一个关联表,但不确定要使用哪个级联选项。我希望能够创建一个新的 Entity1 实例,将一个新的 Entity2 实例添加到它的列表中,调用 Save,然后将两者都插入到数据库中(反之亦然)。删除实体时,它应该删除与子实体的任何关联,但不删除子实体本身。我应该使用 cascade="save-update"吗?
最佳答案
是的。在这种情况下,听起来“保存更新”就是您想要的。
我从未在文档中找到对每个级联选项的很好解释,但使用了这个 blog post由 Ayende 作为引用。
- none - 不做任何级联,让用户自己处理。
- save-update - 当对象被保存/更新时,检查关联并保存/更新任何需要它的对象(包括保存/更新多对多场景中的关联)。
- delete - 当对象被删除时,删除关联中的所有对象。
- delete-orphan - 当删除对象时,删除关联中的所有对象。除此之外,当一个对象从关联中删除并且不与另一个对象关联(孤立)时,也将其删除。
- all - 当对象被保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。
- all-delete-orphan - 当对象被保存/更新/删除时,检查关联并保存/更新/删除找到的所有对象。除此之外,当一个对象从关联中删除并且不与另一个对象关联(孤立)时,也将其删除。
关于c# - NHibernate Cascade=保存更新”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1152060/