c# - NHibernate Cascade=保存更新”?

标签 c# nhibernate nhibernate-cascade

免责声明:我是 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/

相关文章:

nhibernate - 如何在多对多关系中删除?

NHibernate 级联保存

C#.NET Autocad 2021 API : Accessing specific BlockTableRecords within a given BlockTable?

nhibernate - NHibernate中Session.Clear()的用途是什么?

c# - 'NHibernate.Spatial.Type.GeometryType' 处理的“GeoAPI.Geometries.IGeometry”不可序列化

nhibernate - 在存储库层中使用 Fluent NHibernate 进行注入(inject)

c# - 安装安装程序后运行 Windows 应用程序时 Appcrash

c# - 括号之间的 Visual Studio 2015 高亮 block {}

c# - C# switch 语句的默认标签将如何处理可为 null 的枚举?