Generic dal

Soyez le premier à donner votre avis sur cette source.

Vue 8 860 fois - Téléchargée 691 fois

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

Ajouter un commentaire

Commentaires

zebobo5
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
1 -
Salut TMCUH,

Peut-être que je la réinvente, je ne vois pas trop en quoi... De toutes façon, toutes les DAL se ressemblent plus ou moins...
Cette source est destiné surtout à voir la possibilité des générics, dans une couche d'accès aux données assez simple, en Framework 2.0, sans paramètrage (à part la ConnectionString).
tmcuh
Messages postés
463
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
18 avril 2009
-
Ca me semble bien codé, l'idée est bonne, mais j'ai l'impression que tu réinvente la roue

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.