Blog

SQL Compact, Identity Columns e Entity Framework


Para quem está desenvolvendo ou quer desenvolver um projeto utilizando o SQL Server Compact 3.5, saiba que existe uma falha relacionada ao comportamento identity em colunas das tabelas da base da dados. Uma alternativa para solucionar isto é não definir na base de dados as colunas como identity e criar um controle externo para índice dos registros. Uma forma de controlar os índices das tabelas é consultando o ultimo índice adicionado, claro que não funcionará como o identity normal, que define o índice baseando-se em um contador, mas funcionará muito bem e permitira o uso da base de dados. Abaixo vemos a implementação desta solução:

 
public static class ExtensionMethods
{
    public static TResult NextId(this ObjectSet table, Expression> selector)
        where TSource : class
    {
        TResult lastId = table.Any() ? table.Max(selector) : default(TResult);

        if (lastId is int)
        {
            lastId = (TResult)(object)(((int)(object)lastId) + 1);
        }

        return lastId;
    }
}

E utilize do seguinte artifício para controlar o índice dos registros:
 
using (DBEntities contexto = new DBEntities())
{
    // cria aluno define um novo objeto aluno
    Aluno aluno = new Aluno() {
        contexto.Aluno.NextId(a => a.Id),
        Nome = "João Felipe Portela" }; 

    // adiciona a lista de alunos
    contexto.AddToAluno(aluno); 

    // salva as alterações
    contexto.SaveChanges();
}

Mais informações em enigmadomain.wordpress.com.


(Este artigo foi atualizado em 08/01/2017)

C# .net SQL Compact Identity Columns Entity Framework

CRUD com Entity Framework


O Entity Framework permite aos desenvolvedores realizar operações em base de dados através de um mapeamento objeto relacional. Com esta tecnologia classes que refletem as entidades da base de dados são criadas com o intuito de serem utilizadas no lugar de querys SQL. Com isso, além de ganhar em facilidade, é possível diminuir a quantidade de código e manutenção necessária para aplicações orientadas por dados.


Para selecionar:

using (DBEntities contexto = new DBEntities())
{
    // seleciona um aluno especifico na lista de alunos
    Aluno aluno = (from alunoX in contexto.Aluno
              where alunoX.Nome == "João Felipe Portela"
              select alunoX);
}

Para inserir:

using (DBEntities contexto = new DBEntities())
{
    // cria aluno define um novo objeto aluno
    Aluno aluno = new Aluno() { Nome = "João Felipe Portela" };

    // adiciona a lista de alunos
    contexto.AddToAluno(aluno);

    // salva as alterações
    contexto.SaveChanges();
}

Para atualizar:

using (DBEntities contexto = new DBEntities())
{
    // seleciona um aluno especifico na lista de alunos
    Aluno aluno = (from alunoX in contexto.Aluno
             	   where alunoX.Nome == "João Felipe Portela"
             	   select alunoX).First();

    // altera o nome do aluno
    aluno.Name = "João Felipe";

    // salva as alterações
    contexto.SaveChanges();
}

Para remover:

using (DBEntities contexto = new DBEntities())
{
    // seleciona um aluno especifico na lista de alunos
    Aluno aluno = (from alunoX in contexto.Aluno
             	   where alunoX.Nome == "João Felipe Portela"
             	   select alunoX).First();

    // remove da lista de alunos
    contexto.DeleteObject(aluno);

    // salva as alterações
    contexto.SaveChanges();
}


(Este artigo foi atualizado em 08/01/2017)

C# CRUD Entity Framework