Generic dal

Description

Simple couche d'accès aux données utilisant les génériques pour dotNet 2.

Ce projet n'est qu'une approche simpliste de l'accès aux données par génériques.

Cette mise en place de la DAL a été pensé pour les bases de données mal architecturées (et oui cela arrive chez certains clients :( )

- Elle gère, l'insertion, update, delete
- Possibilité de définir quel champ est à renvoyer dans le ToString() de la table mappée
- Événements sur toutes les actions
- Generic (donc on évite un maximum d'erreur!!!)

Source / Exemple :


//Generation  du mapping de la table PERSONS ET ORDERS
/*------------------------------------------------------*/

//Creation de la connection
System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection("Data Source=.;Initial Catalog=TestOrm;Integrated Security=True");
ZeBobo5.LibraryHelper.Core.Sql.SqlHelper.AddConnection("connection", connection);

//Generation du mapping
ZeBobo5.LibraryHelper.Orm.OrmDataElementGenerator.Generate("connection", "PERSONS");
ZeBobo5.LibraryHelper.Orm.OrmDataElementGenerator.Generate("connection", "ORDERS");

//Fermeture de la connection
ZeBobo5.LibraryHelper.Core.Sql.SqlHelper.CloseConnection("connection");
// ou pour toutes les connections
ZeBobo5.LibraryHelper.Core.Sql.SqlHelper.CloseAndDisposeAllConnections();

/*------------------------------------------------------*/
//Exemple de mapping généré pour la table PERSONS
/*------------------------------------------------------*/
using System;
using ZeBobo5.LibraryHelper.Orm;

public class PERSONS : OrmDataElementBase<PERSONS>
{
    public OrmValues<Int32> ID
    {
        get
        {
            return Fields.ID.Values(this);
        }
    }
    public OrmValues<String> NAME
    {
        get
        {
            return Fields.NAME.Values(this);
        }
    }
    public OrmValues<Int32> AGE
    {
        get
        {
            return Fields.AGE.Values(this);
        }
    }
    public OrmValues<Int32> YEAR
    {
        get
        {
            return Fields.YEAR.Values(this);
        }
    }
    public class Fields
    {
        public static OrmField<PERSONS, Int32> ID = new OrmField<PERSONS, Int32>("ID", 0);
        public static OrmField<PERSONS, String> NAME = new OrmField<PERSONS, String>("NAME", "");
        public static OrmField<PERSONS, Int32> AGE = new OrmField<PERSONS, Int32>("AGE", 0);
        public static OrmField<PERSONS, Int32> YEAR = new OrmField<PERSONS, Int32>("YEAR", 0);
    }
}

/*------------------------------------------------------*/
//Utilisation de la DAL
/*------------------------------------------------------*/

//Creation de la connection
System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection("Data Source=.;Initial Catalog=TestOrm;Integrated Security=True");
ZeBobo5.LibraryHelper.Core.Sql.SqlHelper.AddConnection("connection", connection);

//Creation des clés étrangères
ZeBobo5.LibraryHelper.OrmDatabaseSchema.AddLink(
   new OrmDataLink<PERSONS, ORDERS>(PERSONS.Fields.ID, ORDERS.Fields.PERSON_ID),
   new OrmDataLink<PERSONS, ORDERS>(PERSONS.Fields.YEAR, ORDERS.Fields.ORDERYEARDATE));

//Recuperation d'une liste de personnes
OrmDataElementList<PERSONS> lstPersonnes =
   ZeBobo5.LibraryHelper.Orm.OrmDataFactory<PERSONS>.
      Select("connetion").
      Where(OrmWhereFactory.Comparators<PERSONS>.LessThan(PERSONS.Fields.AGE, 25)).
      OrderBy(OrmOrderByFactory<PERSONS>.Asc(PERSONS.Fields.NAME)).
      Execute();

foreach (PERSONS item in lstPersonnes)
{
   Console.WriteLine(string.Format("{0} a passé {1} commande(s).", item.NAME.CurrentValue, item.LinkTo<ORDERS>().Count);
   
}
//Mise à jour de données
lstPersonnes[0].Name.CurrentValue = "Toto";
Console.WriteLine(string.Format("Valeur originale du NAME : {0}", lstPersonnes[0].Name.OriginalValue);
Console.WriteLine(string.Format("Valeur nouvelle du NAME : {0}", lstPersonnes[0].Name.CurrentValue);
lstPersonnes.SaveChanges();

ZeBobo5.LibraryHelper.Core.Sql.SqlHelper.CloseAndDisposeAllConnections();

Conclusion :


Les sources sont disponible sur http://libraryhelper.googlecode.com/ pour les évolutions.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.