Consultar, modificar y validar datos con Entity Framework

En la entrada anterior Formulario WPF de mantenimiento de usuarios se desarrolló una aplicación de mantenimiento de usuarios. En dicha aplicación se trabajaba con datos en memoria, ahora veremos como gestionar la persistencia de los datos en una tabla de SQL Server mediante el uso del ORM Entity Framework.

1. Instalación de Entity Framework

Mediante la opción de Visual Studio Tools>Nuget Package Manager>Manage Nuget Packages for solution instalamos Entity Framework en nuestro proyecto.

2. Creación de la cadena de conexión a la base de datos

Una vez instalado Entity Framework, en el proyecto aparecerá automáticamente un fichero xml llamado App.config donde agregamos la cadena de conexión a nuestra base de datos:


<connectionStrings>
<add name="DAPContext" connectionString="Data Source=localhost\SQLEXPRESS;uid=sa;pwd=123456;database=DAP" providerName="System.Data.SqlClient" />
</connectionStrings>

3. Creación de la clase Usuario

La clase que se mapea con la tabla de Usuarios es la siguiente:

    [Table("Usuarios")]
    public class Usuario :IValidatableObject
    {
        public int UsuarioId { get; set; }
        public string Nombre { get; set; }
        public string Password { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (Nombre==null || !(Nombre.Length >= 5 && Nombre.Length <= 20))
            {
                yield return new ValidationResult("El nombre debe tener una longitud entre 5 y 20 caracteres", new[] { "Nombre" });
            }
            if (Password==null || !(Password.Length >= 5 && Password.Length <= 20))
            {
                yield return new ValidationResult("El password debe tener una longitud entre 5 y 20 caracteres", new[] { "Password" });
            }
        }
    }

Es necesario poner [Table(“Usuarios”)], puesto que el nombre de la clase Usuario no coincide con el nombre de tabla Usuarios.

La validación de datos la realizamos implementando la interfaz IValidatableObject. Otra forma de hacer validaciones es usando atributos de validación, como: MaxLength, Required, etc.

4. Creación de la clase DAPContext

DbContext es la clase principal que necesitamos para poder interactuar con la base de datos. Debemos crear una clase que herede de DbContext:

    public class DAPContext:DbContext
    {
        public DAPContext(): base("DAPContext")
        {
            Database.SetInitializer<DAPContext>(null); //no initialization
        }
        public DbSet<Usuario> Usuarios { get; set; }
    }

En el constructor ponemos el código Database.SetInitializer(null) para que no se realice ningún cambio en la estructura de las tablas de la base de datos.

5. Consulta y modificación de datos

A continuación te muestro el código para poder consultar y modificar datos usando la clase DAPContext:


    public class ServicioUsuarios
    {
        public List<Usuario> Retrieve()
        {
            List<Usuario> lista;
            using (var db = new DAPContext())
            {
                var usuarios = from user in db.Usuarios
                        select user;
                lista = usuarios.ToList();
            }
            return lista;            
        }

        public Usuario Retrieve(int id)
        {
            Usuario usuario;
            using (var db = new DAPContext())
            {
                usuario = (from us in db.Usuarios
                            where us.UsuarioId == id
                            select us).Single();
            }
            return (usuario);
        }

        public int Create(Usuario obj)
        {
            var nuevoUsuario = new Usuario() { Nombre=obj.Nombre,Password=obj.Password};
            using (var dbCtx = new DAPContext())
            {
                dbCtx.Usuarios.Add(nuevoUsuario);
                dbCtx.SaveChanges();
            }
            return nuevoUsuario.UsuarioId;
        }

        public void Update(Usuario obj)
        {
            Usuario user = new Usuario() { UsuarioId = obj.UsuarioId, Nombre = obj.Nombre, Password = obj.Password };
            using (var dbCtx = new DAPContext())
            {
                dbCtx.Entry(user).State = EntityState.Modified;
                dbCtx.SaveChanges();
            }
        }

        public void Delete(int id)
        {
            var user = new Usuario { UsuarioId = id };
            using (var dbCtx = new DAPContext())
            {
                dbCtx.Usuarios.Attach(user);
                dbCtx.Usuarios.Remove(user);
                dbCtx.SaveChanges();
            }
        }
    }


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *