コード例 #1
0
        public override void Eliminar(Cliente cliente, Usuario usuario, IDbContext cntxt)
        {
            using (var transaccion = cntxt.EmpezarTransaccion())
            {
                try
                {
                    foreach (var tel in cliente.Telefonos) //ModelBuilder no se encarga
                    {
                        cntxt.Entry <Telefono>(tel).State = System.Data.Entity.EntityState.Deleted;
                    }

                    foreach (var obs in cliente.ObservacionCliente)
                    {
                        cntxt.Entry <ObservacionCliente>(obs).State = EntityState.Deleted;
                    }

                    foreach (var obsLog in cliente.ObservacionClienteLogistica)
                    {
                        cntxt.Entry <ObservacionCliente>(obsLog).State = EntityState.Deleted;
                    }

                    cntxt.SaveChanges(); //para borrar las listas 1-*

                    this.AgregarAListaParaBorrar(cliente.DatosOld);
                    if (cliente.Domicilio != null)
                    {
                        if (cliente.Domicilio.Id > 0)
                        {
                            this.AgregarAListaParaBorrar(cliente.Domicilio);
                        }
                    }
                    if (cliente.LugarEntrega != null)
                    {
                        if (cliente.LugarEntrega.Id > 0)
                        {
                            this.AgregarAListaParaBorrar(cliente.LugarEntrega);
                        }
                    }

                    var cliABorrar = cntxt.BuscarPorId <Cliente>(cliente.Id, Core.CargarRelaciones.NoCargarNada);

                    cntxt.Entry <Cliente>(cliABorrar).State = EntityState.Deleted;

                    cntxt.SaveChanges(); //para borrar el cliente

                    this.EliminarGrafo(cntxt);

                    //foreach (var confCred in cliente.ConfiguraCreditos)
                    //{
                    //    //setearFK para cada fk
                    //    confCred.CobradorId = SetearFk(confCred, "Cobrador");
                    //    confCred.CondicionDePagoId = SetearFk(confCred, "CondicionDePago");
                    //    confCred.CondicionDePago2Id = SetearFk(confCred, "CondicionDePago2");
                    //    confCred.VendedorId = SetearFk(confCred, "Vendedor");
                    //    confCred.VendedorEspecialId = SetearFk(confCred, "VendedorEspecial");
                    //    cntxt.Entry<ConfiguraCredito>(confCred).State = EntityState.Deleted;
                    //}

                    //cliente.GrupoDinamico.Clear(); //no puedo eliminar los grupoDinamico por uno, sino los borraria para todos, no?

                    //cliente.ProvinciaId = SetearFk(cliente, "Provincia");

                    //cliente.RamoId = SetearFk(cliente, "Ramo");

                    //cliente.LocalidadId = SetearFk(cliente, "Localidad"); //FK

                    //cliente.LocalidadDeEntregaId = SetearFk(cliente, "LocalidadDeEntrega"); //FK

                    //cliente.RutasDeVenta.Clear();

                    //foreach (var tar in cliente.TarjetasCliente)
                    //{
                    //    tar.TipoTarjetaId = SetearFk(tar, "TipoTarjeta");
                    //    cntxt.Entry<TarjetaMayoristaItem>(tar).State = EntityState.Deleted;
                    //}


                    cntxt.insertaAuditoria <Cliente>(cliente, Accion.Elimina, usuario); //este metodo lo invoca el Borrar del DbContext en el GrabadorGenerico
                    //grabador generico se encarga de SaveChanges() - Metodo public ErrorCarrier Borrar(TEntidad entidad, Usuario Usuario)
                    transaccion.Commit();
                }
                catch (Exception ex)
                {
                    transaccion.Rollback();
                }
            }
        }