NHibernate:一对多

Posted

技术标签:

【中文标题】NHibernate:一对多【英文标题】:NHibernate: One-to-many 【发布时间】:2017-09-03 07:43:14 【问题描述】:

我有一个名为 DadosvalmetSam (Parent) 的类,它与 Dadosfuncionariosam(Child) 具有一对多的关系。

下面的类和映射:

DadosvalmetSam

public class DadosvalmetSam


    public DadosvalmetSam()
    
        dadosFuncionarios = new List<DadosfuncionarioSam>();
    

    public virtual int codigoDvm  get; set;       

    public virtual MetanomeSam codmenDvm  get; set;       

    public virtual ValidadeSam codvalDvm  get; set;   

    public virtual IList<DadosfuncionarioSam> dadosFuncionarios  get; set; 




public class DadosvalmetSamMap : ClassMap<DadosvalmetSam>


    public DadosvalmetSamMap()
    
        Table("dadosvalmet_sam");
        Id(x => x.codigoDvm).Column("codigo_dvm").GeneratedBy.Identity().Not.Nullable();
        References(x => x.codmenDvm).Column("codmen_dvm").Not.Nullable().Not.LazyLoad();
        References(x => x.codvalDvm).Column("codval_dvm").Not.Nullable().Not.LazyLoad();
        HasMany(x => x.dadosFuncionarios).KeyColumn("coddvm_dfu").Cascade.All().Not.LazyLoad();
    

DadosfuncionarioSam

public class DadosfuncionarioSam


    public DadosfuncionarioSam()
    
    

    public virtual DadosvalmetSam coddvmDfu  get; set;        

    public virtual Funcionario codfunDfu  get; set;       

    public virtual int codigoDfu  get; set;       

    public virtual float? valorDfu  get; set;     




public class DadosfuncionarioSamMap : ClassMap<DadosfuncionarioSam>


    public DadosfuncionarioSamMap()
    
        Table("dadosfuncionario_sam");
        Id(x => x.codigoDfu).Column("codigo_dfu").GeneratedBy.Identity().Not.Nullable();
        References(x => x.codfunDfu).Column("codfun_dfu").Not.Nullable().Not.LazyLoad();
        Map(x => x.valorDfu).Column("valor_dfu").Not.Nullable();
        References(x => x.coddvmDfu).Column("coddvm_dfu").Nullable();
    

当我插入一个 DadosvalmetSam 时,NH 将所有数据插入到 IList 中,这正是我所期望的。但是当我更新一个 DadosvalmetSam 并且在这次更新中我从 IList 中删除了一行时,NH 只是将 DadosfuncionarioSam 中的 FK 设置为 null 并且它没有删除记录,我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

你试过了吗

HasMany(x => x.dadosFuncionarios).KeyColumn("coddvm_dfu").Cascade.DeleteOrphans().Not.LazyLoad();

【讨论】:

是的,但是这个映射在构建会话时给我一个错误。 MappingException:不支持的级联样式:删除孤儿

以上是关于NHibernate:一对多的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate 级联删除不适用于一对多关联

一对多引用上的流畅 NHibernate 重复行

使用 NHibernate 进行级联更新一对多

NHibernate左连接选择计数在一对多关系中

单向一对多关系的流畅 NHibernate 配置 - 删除问题

Nhibernate:如何用一对多关系表示多对多关系?