如何在Fluent NHibernate中删除孩子



我在类别和产品之间有一对多关系。它们通过映射中的 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 为空:

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

结果在这里:

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

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

Clear应该明确地这样做。简单地替换阵列是行不通的。此外,您应该在Clear之前加载它们(我注意到您设置了延迟加载(。

最新更新