none
CRUD no EF RRS feed

  • Pergunta

  • Bom Dia.....

    Minhas duvidas sao:
    1-Como inserir um novo registros em uma tabela que existe um relacionamento de muitos-para-um usando o Entity Framework??
    Ex.: em minha tabela de Clientes tem um relacionamentocom o grupo de clientes de muitos para um(Muitos Clientes podem ter um Grupo)  e ate aparece uma propiedade com o nome da tabela realcionada(Cliente.Grupo) mais na hora de persistir no banco esta dano erro.

    2 - Como efeturar um update desse campo.
    3 - Como efetuar um update de um relacionamento de um-para-muitos.
    Ex:. Na mesma tabela tenho em relacionamento com a tabela contatos de um-para-muitos(um cliente pode ter varios contatos).
    Nesse caso quiando carrego o cliente ele aparece um lista com os contatos relacionados em Clientes.Contatos, mas com faço para atualizar um contato da lista??

    Nao sei se da pra entender mais é isso....
    Aguem pode me ajudar???


    • Movido AndreAlvesLimaModerator quinta-feira, 11 de fevereiro de 2010 15:31 Migrado de VB (De:VB.NET e Visual Basic)
    quinta-feira, 11 de fevereiro de 2010 13:32

Respostas

  • Eu vou postar como eu faço: Lembrando que está em c#

    Inserir:

    //Insere um novo registro na tabela ProdutoFiscal
            public void insertUfFiscal()
            {
                try
                {
                    Entities db = new Entities();
                    UFPerfilFiscal newUfPerfilFiscal = new UFPerfilFiscal();

                    //Todas as referências
                    Empresa rEmpresa = db.Empresa.FirstOrDefault(m => m.codigo == this.codigoEmpresa);

                    UF rUF = db.UF.FirstOrDefault(m => m.codigo == this.codigoUF);

                    PerfilFiscal rPerfil = db.PerfilFiscal.FirstOrDefault(m => m.codigoperfil == this.codigoPerfil);

                    //Atribuição dos valores
                    newUfPerfilFiscal.EmpresaReference.Value = rEmpresa;
                    newUfPerfilFiscal.UFReference.Value = rUF;
                    newUfPerfilFiscal.PerfilFiscalReference.Value = rPerfil;

                    db.AddToUFPerfilFiscal(newUfPerfilFiscal);
                    db.SaveChanges();
                    MessageBox.Show(ClassMessages.SucessInsert);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ClassMessages.ErrorInsert + ex.Message);
                }
            }




    update:

    //Altera um registro na tabela PerfilFiscal
            public void updatePerfilFiscal()
            {
                try
                {
                    //Instancia da Entitade
                    Entities db = new Entities();

                    //Instancia do novo Registro de Perfil Fiscal
                    PerfilFiscal updatePerfilFiscal = db.PerfilFiscal.FirstOrDefault(pa => pa.codigoperfil == sCodigoPerfil);

                    //Todas as referencias as tabelas FK que irão compor o Perfil Fiscal
                    OrigemIcms rOrigemIcmsDentroEstado = db.OrigemIcms.FirstOrDefault(m => m.codigoOrigemIcms == this.codigoOrigemICMSDentroEstado);
                    OrigemIcms rOrigemIcmsForaEstado = db.OrigemIcms.FirstOrDefault(m => m.codigoOrigemIcms == this.codigoOrigemICMSForaEstado);

                   

                    Ncm rNCM = db.Ncm.FirstOrDefault(m => m.codigoNcm == this.codigoNCM);

                    //Atribuicao dos valores ao registro de Perfil Fiscal
                    updatePerfilFiscal.descricao = this.descricao;
                  
                    updatePerfilFiscal.OrigemIcmsReference.Value = rOrigemIcmsDentroEstado;
                    updatePerfilFiscal.OrigemIcms1Reference.Value = rOrigemIcmsForaEstado;              
                    updatePerfilFiscal.percentualIcmsDentroEstado = Convert.ToDecimal(this.percentualICMSDentroEstado);
                    updatePerfilFiscal.percentualIcmsForaEstado = Convert.ToDecimal(this.percentualICMSForaEstado);
                    updatePerfilFiscal.percentualReducaoIcmsDentroEstado = Convert.ToDecimal(this.percentualReducaoICMSDentroEstado);
                    updatePerfilFiscal.percentualReducaoIcmsForaEstado = Convert.ToDecimal(this.percentualReducaoICMSForaEstado);
                    updatePerfilFiscal.percentualIvaDentroEstado = Convert.ToDecimal(this.percentualIvaDentroEstado);
                    updatePerfilFiscal.percentualIpi = Convert.ToDecimal(this.percentualIPI);
                    updatePerfilFiscal.percentualPis = Convert.ToDecimal(this.percentualPIS);
                    updatePerfilFiscal.percentualCofins = Convert.ToDecimal(this.percentualCOFINS);
                    updatePerfilFiscal.codigoIcmsPdvDentroEstado = this.codigoICMSPdvDentroEstado;
                   

                    //Altera um perfil fiscal
                    //db.AddToPerfilFiscal(updatePerfilFiscal);
                    db.SaveChanges();
                    MessageBox.Show(ClassMessages.SucessUpdate);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ClassMessages.ErrorUpdate + ex.Message);
                }
            }



    retalhei um pouco os métodos pois são muitos campos, mas creio que deu pra clarear bem a idéia!
         
    quinta-feira, 11 de fevereiro de 2010 16:08
  • parece que o henrique estava passando pelo mesmo problema, dá uma olhada:

    http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/thread/8b136e4e-7cef-43d0-8e9a-ee5dff3cdfd9
    sexta-feira, 12 de fevereiro de 2010 11:03

Todas as Respostas

  • Eu vou postar como eu faço: Lembrando que está em c#

    Inserir:

    //Insere um novo registro na tabela ProdutoFiscal
            public void insertUfFiscal()
            {
                try
                {
                    Entities db = new Entities();
                    UFPerfilFiscal newUfPerfilFiscal = new UFPerfilFiscal();

                    //Todas as referências
                    Empresa rEmpresa = db.Empresa.FirstOrDefault(m => m.codigo == this.codigoEmpresa);

                    UF rUF = db.UF.FirstOrDefault(m => m.codigo == this.codigoUF);

                    PerfilFiscal rPerfil = db.PerfilFiscal.FirstOrDefault(m => m.codigoperfil == this.codigoPerfil);

                    //Atribuição dos valores
                    newUfPerfilFiscal.EmpresaReference.Value = rEmpresa;
                    newUfPerfilFiscal.UFReference.Value = rUF;
                    newUfPerfilFiscal.PerfilFiscalReference.Value = rPerfil;

                    db.AddToUFPerfilFiscal(newUfPerfilFiscal);
                    db.SaveChanges();
                    MessageBox.Show(ClassMessages.SucessInsert);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ClassMessages.ErrorInsert + ex.Message);
                }
            }




    update:

    //Altera um registro na tabela PerfilFiscal
            public void updatePerfilFiscal()
            {
                try
                {
                    //Instancia da Entitade
                    Entities db = new Entities();

                    //Instancia do novo Registro de Perfil Fiscal
                    PerfilFiscal updatePerfilFiscal = db.PerfilFiscal.FirstOrDefault(pa => pa.codigoperfil == sCodigoPerfil);

                    //Todas as referencias as tabelas FK que irão compor o Perfil Fiscal
                    OrigemIcms rOrigemIcmsDentroEstado = db.OrigemIcms.FirstOrDefault(m => m.codigoOrigemIcms == this.codigoOrigemICMSDentroEstado);
                    OrigemIcms rOrigemIcmsForaEstado = db.OrigemIcms.FirstOrDefault(m => m.codigoOrigemIcms == this.codigoOrigemICMSForaEstado);

                   

                    Ncm rNCM = db.Ncm.FirstOrDefault(m => m.codigoNcm == this.codigoNCM);

                    //Atribuicao dos valores ao registro de Perfil Fiscal
                    updatePerfilFiscal.descricao = this.descricao;
                  
                    updatePerfilFiscal.OrigemIcmsReference.Value = rOrigemIcmsDentroEstado;
                    updatePerfilFiscal.OrigemIcms1Reference.Value = rOrigemIcmsForaEstado;              
                    updatePerfilFiscal.percentualIcmsDentroEstado = Convert.ToDecimal(this.percentualICMSDentroEstado);
                    updatePerfilFiscal.percentualIcmsForaEstado = Convert.ToDecimal(this.percentualICMSForaEstado);
                    updatePerfilFiscal.percentualReducaoIcmsDentroEstado = Convert.ToDecimal(this.percentualReducaoICMSDentroEstado);
                    updatePerfilFiscal.percentualReducaoIcmsForaEstado = Convert.ToDecimal(this.percentualReducaoICMSForaEstado);
                    updatePerfilFiscal.percentualIvaDentroEstado = Convert.ToDecimal(this.percentualIvaDentroEstado);
                    updatePerfilFiscal.percentualIpi = Convert.ToDecimal(this.percentualIPI);
                    updatePerfilFiscal.percentualPis = Convert.ToDecimal(this.percentualPIS);
                    updatePerfilFiscal.percentualCofins = Convert.ToDecimal(this.percentualCOFINS);
                    updatePerfilFiscal.codigoIcmsPdvDentroEstado = this.codigoICMSPdvDentroEstado;
                   

                    //Altera um perfil fiscal
                    //db.AddToPerfilFiscal(updatePerfilFiscal);
                    db.SaveChanges();
                    MessageBox.Show(ClassMessages.SucessUpdate);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ClassMessages.ErrorUpdate + ex.Message);
                }
            }



    retalhei um pouco os métodos pois são muitos campos, mas creio que deu pra clarear bem a idéia!
         
    quinta-feira, 11 de fevereiro de 2010 16:08
  • Olá Daniel....
    Cara muito obrigado pela força...

    Eu arranho um pouquinho em C#,e deu pra entender perfeitamente.

    Fiz como no exemplo mas na hora se setar o apropiedade Reference ao objeto com as informações ex:(updatePerfilFiscal.OrigemIcmsReference.Value = rOrigemIcmsDentroEstado), esta dando um erro dizendo que nao pode continuar pois os objetos estao em DataContext diferentes....

    Não consegui entender pois tenho um unico context no projeto...so se forem instancias diferente....

    O que pode ser???

    Obrigado mais uma vez.
    sexta-feira, 12 de fevereiro de 2010 10:59
  • parece que o henrique estava passando pelo mesmo problema, dá uma olhada:

    http://social.msdn.microsoft.com/Forums/pt-BR/adoptpt/thread/8b136e4e-7cef-43d0-8e9a-ee5dff3cdfd9
    sexta-feira, 12 de fevereiro de 2010 11:03
  • Igor,

    Passei pelo mesmo problema... da uma olhada no link que o Daniel passou..
    Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
    sábado, 13 de fevereiro de 2010 03:19