CRUD com ADO.NET Entity Framework

Hoje iremos ver um pouco sobre como fazer operações basicas com o Entity Framework

Criação

Para criar o registro é bem simples basta utilizar apenas duas chamadas ObjectContext: adição e salvamento dos dados.


using
(NorthwindEntities db = new NorthwindEntities())
{
Products products = new Products();
products.ProductName = “Teste”;
products.QuantityPerUnit = “10″;
products.UnitsInStock = 10;
db.AddToProducts(products);
db.SaveChanges();
}

Consulta

A coleção de objetos persistidos pode ser obtida acessando o ObjectContext. Para cada tabela mapeada, existe uma coleção de objetos no ObjectContext correspondente, que pode ser utilizada para realizar consultas. Na implementação destas coleções, os dados não estão disponíveis em memória. Eles só são recuperados do banco quando requisitados, conforme critérios de seleção e junção.

A recuperação de dados pode ser realizada utilizando LINQ. No entanto, diferentemente do LINQ-To-SQL, somente são recuperados dados explicitamente requisitados, isto é, entidades associadas não são recuperadas automaticamente por lazy load (será abordado mais adiante). Assim, para recuperar o produto de ID 2, basta executar:

Products products = db.Products.First(p => p.ProductID == 2);

(Apesar da função “Single” ser mais apropriada, ela não é suportada pelo Entity Framework, cuja utilização dispara uma exceção.)

No modelo, região possui relacionamento de 1 para N com territórios, podendo navegar pela propriedade Territories. No entanto, a coleção vem inicialmente vazia, sendo necessária, para recuperar as associações, executar o lazy load da coleção, ou definir a carga por eager load.

Atualização

Para atualizar um item, basta modificar a propriedade da entidade recuperada pelo ObjectContext e chamar o método SaveChanges. Se o objeto a ser atualizado não foi fornecido pelo ObjectContext, como poderia acontecer numa recepção de dados via WCF, é necessário antes recuperar o objeto e repassar as alterações:

using (NorthwindEntities db = new NorthwindEntities())
{
Products products = new Products();
products.ProductName =
“Teste Alteracao” ;
products.QuantityPerUnit = 10 ;
products.ProductID = 79;
Products original = db.Products.First(p => p.ProductID == products.ProductID);db.ApplyPropertyChanges(“Products”, products);
db.SaveChanges();
}

Remoção

A remoção é uma operação bastante simples. Ela se resume a uma chamada do método DeleteObject:

db.DeleteObject(db.Products.First(p => p.ProductID == 79));
db.SaveChanges();

Simples e pratico agora é só estudar um pouquinho que dá para ir longe ;)

Até a próxima

Abs

8 Respostas

  1. Olá Leonardo, seu post acima foi muito útil, consegui realizar todas estas operações, porém estou com um problema quanto às inserção de dados em tabelas que possuem chave estrangeira.
    Por exemplo: Num determinado sistema eu sempre gravo o usuário que está executando a transação. Desta forma, basta eu usar uma propriedade chamada UsuarioLogado, que ela traz pra mim o usuário completo. Logo então para incluir dados em uma determinada tabela tenho o seguinte código:

    Malote m=new Malote();
    m.Data=01/01/2009;
    m.Usuario=UsuarioLogado;
    entities.AddToMaloteSet(m);
    entities.SaveChanges();
    entities.AcceptAllChanges();

    Porém, ele está me retornando o segunte erro:

    “Um objeto de entidade não pode ser referenciado por várias instâncias de IEntityChangeTracker.”

    Sei que o erro ocorre devido a chave-estrangeira, pois, em tabelas que não possuem FK não ocorre este erro, mesmo utilizando o mesmo padrão de código.

    Pode me ajudar?

    • Meu email é leonardo_moreno@msn.com
      qual erro que ele apresenta?
      Vlw

  2. Olá Lano,
    obrigado por ter gostado do post

    cara o que o UsuarioLogado é?
    um int com o cod do usuario?

    me falhe mais detalhes por favor

    até mais

  3. Olá Leonardo, Mto Bom o Post mesmo… porém estou com a mesma dúvida do Lano, tenho que fazer um Insert em uma Tabela, soh que essa Tabela tem uma FK estou com problemas para inserir o valor da FK

    • Bruno,
      pode me enviar o codigo que está tentando fazer?

      Obrigado

  4. Claro….

    Segue A baixo:

    Tenho duas tabelas:

    Programa: Id, TipoProgramaId, Desc.
    TipoPrograma: Id, Desc

    Preciso Inserir um registro na tabela Programa,

    Meu codigo,

    public void Insert(int pTipoProgramaId, string pProgramaDesc, string pProgramaStatus)
    {
    try
    {
    using (SEntities db = new SEntities())
    {

    Programa p = new Programa(){ TipoPrograma = TipoProgramaId, Nome = pProgramaNome, Status = pProgramaStatus};

    db.AddToPrograma(p);
    db.SaveChanges();

    }
    }
    catch (Exception)
    {
    throw;
    }
    }

    ess coidgo ai naum esta funfando….

    obrigado pela ajuda…

    qual eh o seu email???

  5. Bruno estou com o mesmo problema seu, se vc conseguir ou já conseguiu resolver, me da uma mão por favor.

  6. Ola Leonardo, vc sabe me dizer como resolver no modelo EF os casos de tabela com auto relacionamento, pois no modelo não é reproduzido o atributo que representa o auto-relacionamento. Pelo menos no meu
    Obrigado

Deixe uma resposta