CRUD

Alejandro Cernuda



Create, read, update y delete (CRUD) Sono le operazioni di base che vengono eseguite su un set di dati. Sono anche i più comuni. Tutti i metodi della libreria esistono nelle loro versioni sincrona e asincrona. Quando possibile, si consiglia di utilizzare quest'ultimo.

Semplici esempi di lettura e scrittura

publicasync TaskTestInsertAsyn(User user)

{

    DataGather dg = DataGather.GetInstance(ConnectionString);

await dg.InsertAsync(user);

}

Come si può vedere, se nel database è presente una tabella denominata User e contiene gli stessi campi dell'oggetto User e anche una chiave primaria, non è necessario specificare nient'altro.

public User: IAR

{

...

}

E molto meglio se la classe User eredita da IAR, una classe astratta creata nella libreria per fornire alcuni dei campi più comuni nella tabella e che forniscono comfort durante il lavoro.

 

///

/// 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;

}

}

Esempio di lettura

publicasync Task<User> GetAsync()

{

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

}

Possiamo anche eliminare i record in modo semplice, purché la tabella abbia una chiave primaria.

await dg.DeleteAsync(user)

await dg.UpdateAsync(user);

Esempio di utilizzo per ottenere dati da più tabelle

Nella vita reale è difficile strutturare i dati in modo che ci sia sempre una tabella o una vista per la classe di cui abbiamo bisogno nel codice. SQLClientCoreTool può funzionare con questa incongruenza. Nell'esempio seguente è necessario importare tutti i dati dalla tabella PostGroup e anche la lingua dalla tabella Langs. Si noti che invece di una query en string potremmo passare il nome di una stored procedure e avere il codice SQl sul server stesso.

  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();

        }