【问题标题】:How to Delete children in Fluent NHibernate如何在 Fluent NHibernate 中删除子级
【发布时间】:2018-01-22 18:54:36
【问题描述】:

我在类别和产品之间有一对多的关系。 它们通过映射中的 categoryId 字段链接。类别记录永远不会被删除,但子产品应该被删除。我通过 json 向我的服务发送不同的有效负载(基于逻辑)。我发送一次的产品数组是这样的:

"products": [{Id=0, Name="p1"}]

它添加它很好,然后第二次添加它很好:

"products": [{Id=111, Name="p1"},{Id=0, Name="p2"}]

这里的数据库正确显示:

|-------|------|------------|
|  Id   | Name | CategoryId |
|-------|------|------------|
|  111  | p1   | 123        |
|  222  | p2   | 123        |

但如果我发送的是空的产品数组,我希望数据库中的两个产品记录都将被删除:

"products": []

但他们没有。

这是我的 NHibernate Fluent 设置:

public CategoryMap()
{
    Table("Category");
    LazyLoad();

    Id(q => q.Id).GeneratedBy.Identity().Column("Id");

    HasMany(q => q.Products)
        .KeyColumn("CategoryId")
        .Cascade
        .AllDeleteOrphan()
        .Inverse();
}

在我的孩子身上:

public ProductMap()
{
    Table("Product");
    LazyLoad();

    Id(x => x.Id).Column("Id").GeneratedBy.Identity();

    Map(x => x.Name).Column("Name");

    References(x => x.Category).Column("CategoryId").Not.Nullable();
}

这里的结果:

|-------|------|------------|
|  Id   | Name | CategoryId |
|-------|------|------------|
|  111  | p1   | 123        |
|  222  | p2   | 123        |

我还尝试让我的 QuestionId 在 DB 和我的子配置中为空:

References(x => x.Category).Column("CategoryId").Nullable();

这里的结果:

|-------|------|------------|
|  Id   | Name | CategoryId |
|-------|------|------------|
|  111  | p1   | NULL       |
|  222  | p2   | NULL       |

我希望孩子们被彻底消灭。我究竟做错了什么?请注意,我想保留父记录。

【问题讨论】:

  • 你能试试这个吗? stackoverflow.com/a/11981259/194717
  • 谢谢。它没有用。我尝试了两个: .Nullable 和 .Not.Nullable 记录不断出现。我认为 SaveUpdate() 至少需要使 categoryId 为空
  • 您是否只是将 Products 集合设置为新实例?我相信你应该 .Remove() 项目或 .Clear() 集合,而不是让级联正常工作。
  • 我希望 NHibernate 根据服务接收到的负载来处理删除。如果有效负载有一个 id = 0 的新项目,那么它会保存,当我发送具有填充 id 的相同对象时,它会更新。如果我不发送对象,它会删除等等
  • 你是如何调用 NHibernate API 来执行删除的?能把执行delete语句的代码贴到数据库吗?

标签: c# fluent-nhibernate


【解决方案1】:

Clear 应该明确地这样做。简单地更换阵列不会。 你也应该在Clear 之前加载它们(我注意到你设置了延迟加载)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多