c# - 如何在 Fluent NHibernate 中删除 child

标签 c# 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();
}

在我的 child 身上:

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       |

我希望 children 被彻底消灭。我究竟做错了什么?请注意,我想保留 parent 的记录。

最佳答案

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

关于c# - 如何在 Fluent NHibernate 中删除 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48388444/

相关文章:

c# - 从 ServiceHost 获取端口号

C# 文化特定符号

c# - 具有默认值的 DateTime 的 Fluent NHibernate 映射

nhibernate - 使用 NHibernate 3.2 和 FluentNHibernate 1.3 截断的十进制字段

c# - 流利的 NHibernate : Cascade delete from one side only on Many-to-Many relationship

nhibernate - 当流利的nhibernate中的基类是抽象的时,如何实现每个具体类的表?

c# - 此 Linq 查询的哪一部分对 nHibernate 无效?

c# - 如何在 Web 应用程序(ASP.Net、C#、IIS)中上传文件

c# - IIS 不识别 View 模型注释

c# - 在 ASP.NET MVC 和 Azure AD 中创建自定义用户角色