Fazer Insert ou Update de um-pra-muitos em MVC

22/08/2015

Boa noite!,

Eu tenho a seguinte situação:
O usuário cadastrará um Fornecedor e também poderá adicionar ou excluir um ou mais Endereços para esse Fornecedor, mas só poderá enviar para o BD ao clicar no botão Salvar :

[img:descricao=Tela de Cadastro de Fornecedor]http://arquivo.devmedia.com.br/forum/imagem/247411-20150822-213152.jpg[/img]


Eu consigo manipular os Endereços no browser, inserir e excluir da Tela, as Models envolvidas são o seguinte:


public class TBFornecedor
    {
        [Key]
        public int TBFORNECEDORID { get; set; }
        public string NMFORNECEDOR { get; set; }
        public string DSFORNECEDOR { get; set; }
        public string CPF { get; set; }
        public string CNPJ { get; set; }
        public string IE { get; set; }
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        public DateTime DTCADFORNECEDOR { get; set; }
        public bool STATUS { get; set; }
        public string SITE { get; set; }
        public string OBSFORNECEDOR { get; set; }
        public virtual ICollection<TBEndereco> TBEndereco { get; set; }        
    }


public class TBEndereco
    {
        [Key]
        public int TBENDERECOID { get; set; }
        public int? TBFORNECEDORID { get; set; }
        public int? TBFUNCIONARIOID { get; set; }       
        public string LOGRADOURO { get; set; }
        public string NUMLOGRADOURO { get; set; }
        public string COMPLEMENTO { get; set; }
        public string BAIRRO { get; set; }
        public string CEP { get; set; }        
        public virtual TBFornecedor TBFornecedor { get; set; }
    }


Minha dúvida é como fazer o Insert e o Update dos dados para gravar no Banco de Dados, uma vez que estou aprendendo a trabalhar com o MVC e Entity ?

Na minha classe os dados chegam perfeitamente, eu imagino algo + ou - assim:

public void InsereFornecedor(TBFornecedor pFornecedor)
        {
            if (pFornecedor.TBFORNECEDORID > 0)
            { 
                //Fornecedor já está cadastrado então
                //Atualizo dados do Fornecedor e
                //Exclui ou Adiciona Endereços
            }
            else
            {
                 //Fornecedor é Novo então
                //faço um insert no BD do Fornecedor e dos Endereços
                _repositorio.Fornecedores.Add(pFornecedor);
            }

            _repositorio.SaveChanges();
        }

Adriano Cordeiro

Currículo

Melhor resposta

01/09/2015

Pesquise por "master detail" no ASP.NET MVC, é esse tipo de relacionamento que você está implementando.

Joel Rodrigues

Responder Citar

Outras Respostas

05/09/2015

Adriano Cordeiro Currículo

Resolvido, criei um botão "Salvar Endereço" em uma janela Modal e no evento click (via jquery) desse botão fiz algo que me atendeu perfeitamente:

fornecedor.TBEndereco.push({
                        "TBENDERECOID": $("#TBENDERECOID").val(),
                        "TBFORNECEDORID": $("#TBFORNECEDORID").val(),
                        "LOGRADOURO": $("#LOGRADOURO").val(),
                        "NUMLOGRADOURO": $("#NUMLOGRADOURO").val(),
                        "COMPLEMENTO": $("#COMPLEMENTO").val(),
                        "BAIRRO": $("#BAIRRO").val(),
                        "CEP": $("#CEP").val(),
                        "SIGLAUF": $("#ddlUF").val(),
                        "STATUSENDERECO": _status
                    });

                    //EXECUTA O TRANSPORTE PARA O BD VIA AJAX:
                    var iconCarregando = $('<img src="~/Imagens/midi.gif" class="icon"/> <span class="destaque">Carregando. Por favor aguarde...</span>')
                    $('#insere_aqui').css('display', 'block');
                    $.ajax({
                        url: "/Fornecedor/AtualizarEndereco",
                        type: "POST",
                        datatype: "JSON",
                        data: JSON.stringify(fornecedor),
                        processData: false,
                        contentType: "application/json; charset=uft-8",
                        beforeSend: function () {
                            //$('#insere_aqui').html(iconCarregando);
                            //$("#insere_aqui").html("<p>Carregando...<p>");
                            alert('Carregando...');
                        },
                        complete: function () {
                            $(iconCarregando).remove();
                        },
                        success: function (data) {
.
.
.


Obrigado !!
Responder Citar