如何在FluentNHibernate上删除对象关系HasManyToMany?

时间:2016-10-25 15:19:48

标签: nhibernate fluent-nhibernate

我有2个实体:EmpresaFormaPagamento这2个实体包含HasManyToMany关系现在我想将对象FormaPagamento删除到Empresa但我不能这样做。

我怎么能这样做?

映射

public class EmpresaMap : ClassMap<Empresa> {
    public EmpresaMap() {
        Table("EMPRESA");
        Id(e => e.id).GeneratedBy.Native();
        Map(e => e.razaoSocial).Not.Nullable().Length(255);
        Map(e => e.nomeFantasia).Length(255);
        Map(e => e.cnpj).Not.Nullable().Length(18); //22.222.222/0001-00
        Map(e => e.inscEstadual).Length(255);
        Map(e => e.telefone).Not.Nullable().Length(14); //(17)98156-8355
        Map(e => e.isAberta);
        Map(e => e.imagem); 

        //embeddable
        Component(e => e.endereco,  e => {
                                    e.Map(c => c.endereco);
                                    e.Map(c => c.numero).CustomType<int>();
                                    e.Map(c => c.bairro);
                                    e.Map(c => c.complemento);
                                    e.Map(c => c.cidade);
                                    e.Map(c => c.cep);
                                    e.Map(c => c.uf).CustomType<GenericEnumMapper<EstadosBrasil>>();
        });

        References<Usuario>(e => e.usuario).Column("usuario_id");
        HasManyToMany<FormaPagamento>(e => e.formasPagto)
                                    .Table("empresa_formaspagto")
                                    .ParentKeyColumn("empresa_id")
                                    .ChildKeyColumn("formapagto_id")
                                    .Cascade
                                    .SaveUpdate();

    }
}


public class FormaPagamentoMap : ClassMap<FormaPagamento> {
    public FormaPagamentoMap(){
        Table("FORMAPAGAMENTO");
        Id(fp => fp.id).GeneratedBy.Native();
        Map(fp => fp.descricao).Not.Nullable().Unique().Length(50);

        HasManyToMany<Empresa>(fp => fp.empresas)
                                    .Table("empresa_formaspagto")
                                    .ParentKeyColumn("formapagto_id")
                                    .ChildKeyColumn("empresa_id")
                                    .Inverse();


    }
}

尝试将FormaPagamento删除到Empresa

/// <summary>
        /// Delete formapagamento into empresa
        /// </summary>
        /// <param name="idEmp">ID empresa</param>
        /// <param name="idFPG">ID formapagamento</param>
        /// <returns>JSON result</returns>
        public JsonResult deleteFormaPagto(long idEmp, long idFPG){
            try{
                Empresa empresa = dao.findObject(idEmp);
                FormaPagamento fp = fpDAO.findObject(idFPG);

                Boolean isDeleted = fpDAO.delete(fp);
                if (isDeleted){
                    jsonResposta.Add("status", "1");
                    jsonResposta.Add("msg", "Forma de pagamento removida com sucesso.");
                }else{
                    jsonResposta.Add("status", "0");
                    jsonResposta.Add("msg", "Erro tentando remover forma de pagamento.");
                }
            }catch (Exception e){
                jsonResposta.Add("status", "0");
                jsonResposta.Add("msg", e.Message);
            }
            return Json(jsonResposta);
        }

1 个答案:

答案 0 :(得分:0)

解决了这个问题。我只删除了集合中的对象FormaPagamento并进行了更新。

我做了。

/// <summary>
        /// Delete formapagamento into empresa
        /// </summary>
        /// <param name="idEmp">ID empresa</param>
        /// <param name="idFPG">ID formapagamento</param>
        /// <returns>JSON result</returns>
        public JsonResult deleteFormaPagto(long idEmp, long idFPG){
            try{
                Empresa empresa = dao.findObject(idEmp);
                FormaPagamento fp = empresa.formasPagto.SingleOrDefault(fpg => fpg.id == idFPG);                
                empresa.formasPagto.Remove(fp);

                Boolean isDeleted = dao.update(empresa);
                if (isDeleted){
                    jsonResposta.Add("status", "1");
                    jsonResposta.Add("msg", "Forma de pagamento removida com sucesso.");
                }else{
                    jsonResposta.Add("status", "0");
                    jsonResposta.Add("msg", "Erro tentando remover forma de pagamento.");
                }
            }catch (Exception e){
                jsonResposta.Add("status", "0");
                jsonResposta.Add("msg", e.Message);
            }
            return Json(jsonResposta);
        }