CRUD

Alejandro Cernuda



Create, read, update y delete (CRUD) Son las operaciones básicas que se realizan sobre un conjunto de datos. También son las más comunes. Todos los métodos de la librería existen en su versión síncrona y asíncrona. Siempre que se pueda recomendamos usar las segunda.

Ejemplos simples de lectura y escritura

publicasync TaskTestInsertAsyn(User user)

{

    DataGather dg = DataGather.GetInstance(ConnectionString);

await dg.InsertAsync(user);

}

Como se puede observar, si en la base de datos existe una tabla llamada User y ésta tiene los mismos campos que el objeto User y además una clave primaria, no es necesario especificar nada más.

public User: IAR

{

...

}

Y mucho major si la clase User hereda de IAR, una clase abstracta creada en la librería para aportar alguno de los campos más comunes en la tabla y que brindan comodidad a la hora de trabajar.

 

///

/// When inheriting from it, any class in the database will have fields normally used in a sql Table; as well as its initialization.

///

publicabstractclassIAR

{

publicint Id { get; set; }

///

/// This property will be initialized as true.

///

publicbool Active { get; set; }

///

/// This property will be initialized with the current date

///

public DateTime RowUpdateDate { get; set; }

publicIAR()

    {

        Active = true;

        RowUpdateDate = DateTime.Now;

}

}

Ejemplo de lectura

publicasync Task<User> GetAsync()

{

return (await dg.GetAsync<User>()).ToList();

}

También podremos eliminar registros de una manera sencilla, siempre y cuando la tabla posea una clave primaria.

await dg.DeleteAsync(user)

await dg.UpdateAsync(user);

Ejemplo de uso para la obtención de datos de varias tablas

En la vida real es difícil estructurar los datos en forma de que siempre haya una tabla o vista para la clase que necesitamos en el código. SQLClientCoreTool puede trabajar con esta incongruencia. En el ejemplo siguiente se necesita traer todos los datos de la tabla PostGroup y además el lenguaje de la tabla Langs. Nótese que en lugar de una query en string podríamos pasar el nombre de un procedimiento almacenado y tener el código de SQl en el propio servidor.

  public class PostGroupView

    {

        public int Id { get;set; }

        public string Title { get;set; }

        public string Link { get;set; }

        public string Lang { get;set; }

    }

  public static List<PostGroupView?> GetAllBySiteId(int siteId)

        {

            string query = GetAllBySiteIdQuery(siteId);

            DataGatherdg = DataGather.GetInstance(SiteConst.ConnectionString);

            return dg.Get<PostGroupView>(query, false).ToList();

        }

 

  private static string GetAllBySiteIdQuery(int siteId)

        {

            StringBuilder sb = new StringBuilder();

            sb.AppendLine($"select distinct pg.*, l.Lang from PostsGroup pg  ");

            sb.AppendLine($"join PostsMeta pm on pg.Id = pm.PostsGroupId and pg.Active = 1 ");

            sb.AppendLine($"join Posts p on pm.PostId = p.Id and p.Active = 1 ");

            sb.AppendLine($"join Langs l on pm.LanguageId= l.Id ");

            sb.AppendLine($"where p.SiteId = {siteId} ");

            return sb.ToString();

        }