Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GENERIC DAL


Information sur la source

Catégorie :Base de données Source .NET ( DotNet ) Classé sous : DAL, basededonnes, ORM, generics Niveau : Initié Date de création : 13/06/2008 Date de mise à jour : 02/09/2008 11:23:57 Vu / téléchargé: 3 508 / 124

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

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

  • //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();
//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.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

13 juin 2008 10:08:40 :
Ajout de la dernière release
13 juin 2008 10:35:07 :
Correction source
13 juin 2008 11:00:16 :
Mise à jour des sources Zip pour inclure le code source
02 septembre 2008 11:23:58 :
Correction de bugs et ajouts de predicats

Commentaires et avis

signaler à un administrateur
Commentaire de tmcuh le 16/06/2008 13:01:57 8/10

Ca me semble bien codé, l'idée est bonne, mais j'ai l'impression que tu réinvente la roue

signaler à un administrateur
Commentaire de zebobo5 le 16/06/2008 14:18:29

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).

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

arbre à fils multiples [ par Ro3090 ] Bonjour,Je voudrais créer un arbre qui ait plusieurs fils à partir d'une liste, sachant que je ne connais pas la taille de ma liste à l'avance.Pour ma application windows avec une couche DAL [ par fabian86 ] bonjour,Je dois réaliser un projet (application windows) qui permet de gérer un cabinet dentaire.prise de rendez vous, ajout modif et suppression de p Linq To Sql [ par 24 ans ] Salut tous le mondeJ ai un petit soucis qui est le suivant :Probleme de fusion de deux Table en une seul table linqvoici le code que j ai ecrit:Dal d1 Utilisation des couches (DAL,DAO,BBL,UI) dans un programme Visual Csharp 2008 [ par masterpiar ] salut à tous, je suis nouveau en visual csharp 2008 express, je viens de realiser une connection avec visual Csharp 2008 express et MySql comme databa


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.