Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 530439
            [titulo] => Fazer Insert ou Update de um-pra-muitos em MVC
            [dataCadastro] => DateTime Object
                (
                    [date] => 2015-09-01 17:08:34
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 232232
            [status] => A
            [isExample] => 
            [NomeUsuario] => Joel Rodrigues
            [Apelido] => 
            [Foto] => 232232_20161017163010.jpg
            [Conteudo] => Pesquise por "master detail" no ASP.NET MVC, é esse tipo de relacionamento que você está implementando.
        )

)

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

Adriano Cordeiro
|
MVP
Pontos: 200
    22 ago 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 :
Tela de Cadastro de Fornecedor (Clique na imagem para abrir em uma nova janela)

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

#Código

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; }        
    }

#Código
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:
#Código
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();
        }

Post mais votado

Joel Rodrigues
   - 01 set 2015

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

1
|
0

Adriano Cordeiro
|
MVP
Pontos: 200
    05 set 2015

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:

#Código

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 !!

0
|
0