none
duvida com metodo update e entity framework RRS feed

  • Pergunta

  • Pessoal, tenho o seguinte método para fazer um update na base de dados :

    (estou usando Entity FrameWork CodFirst)

    public static classBandeiraVO updBandeiraDAO(classBandeiraVO pObjVo, int pCodigoBandeira, ref string errorController)
    {
    DbProviderFactory prov = DbProviderFactories.GetFactory(provider.classProvider.getProvider());
    DbConnection conexao = prov.CreateConnection();
    conexao.ConnectionString = provider.classProvider.getConnectionString();

    classBandeiraVO objBandeiraVO = new classBandeiraVO();
    using (var db = new classContext(conexao))
    {
    try
    {
    objBandeiraVO = (from p in db.t0160_bandeira where p.t0160_id_bandeira == pCodigoBandeira select p).First();

    objBandeiraVO.t0160_id_bandeira = pObjVo.t0160_id_bandeira;
    objBandeiraVO.t0160_grupo_conta = pObjVo.t0160_grupo_conta;
    objBandeiraVO.t0160_id_plano_conta = pObjVo.t0160_id_plano_conta;
    objBandeiraVO.t0160_id_fornecedor = pObjVo.t0160_id_fornecedor;
    objBandeiraVO.t0160_id_conta_bancaria = pObjVo.t0160_id_conta_bancaria;
    objBandeiraVO.t0160_descricao = pObjVo.t0160_descricao;
    objBandeiraVO.t0160_tipo = pObjVo.t0160_tipo;
    objBandeiraVO.t0160_operadora = pObjVo.t0160_operadora;
    objBandeiraVO.t0160_qtde_parcelas = pObjVo.t0160_qtde_parcelas;
    objBandeiraVO.t0160_tx_rotativo = pObjVo.t0160_tx_rotativo;
    objBandeiraVO.t0160_tx_parcelado = pObjVo.t0160_tx_parcelado;
    objBandeiraVO.t0160_dias_pgto = pObjVo.t0160_dias_pgto;
    objBandeiraVO.t0160_dias_uteis = pObjVo.t0160_dias_uteis;
    objBandeiraVO.t0160_status = pObjVo.t0160_status;

    db.SaveChanges();
    var dados = db.t0160_bandeira.Local.ToList();
    objBandeiraVO = dados[0];
    }
    catch (Exception erro)
    {
    objBandeiraVO = null;
    errorController = ("ERRO :" + erro.InnerException.InnerException.Message);
    }
    }
    return objBandeiraVO;
    }


    Funciona perfeitamente, porem eu axo que poderia ser mais facil. no meu caso,  eu instacio um objeto classBandeiraVO, e atribuo os campos (campo a campo) com os dados de um objeto (do mesmo tipo) que foi passado por parametro. Quando é basntante campo, toma muito tempo.


    ao inves de ficar atribuindo campo a campo, tentei o atribuir o objeto da seguinte forma:

    ... 

    classBandeiraVO objBandeiraVO = new classBandeiraVO();
    using (var db = new classContext(conexao))
    {
    try
    {
    objBandeiraVO = (from p in db.t0160_bandeira where p.t0160_id_bandeira == pCodigoBandeira select p).First();

    objBandeiraVO = pObjVo; //*** atribuindo o objeto e nao campo a campo

    db.SaveChanges();
    var dados = db.t0160_bandeira.Local.ToList();
    objBandeiraVO = dados[0];
    } ....


    mas nao dá certo, o que vai para o banco é o objeto como foi consultado e nao o que foi atribuido.


    alguem tem uma forma melhor de fazer isso ?


    alessandre

    quinta-feira, 28 de fevereiro de 2013 16:29