如何在Fluent NHibernate中删除子项

时间:2018-01-22 18:54:36

标签: c# fluent-nhibernate

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

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

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

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

这里DB正确显示:

|-------|------|------------|
|  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        |

我也尝试在DB和我的孩子配置中使我的QuestionId可以为空:

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

结果如下:

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

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

1 个答案:

答案 0 :(得分:0)

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