begin process at 2010 02 10 12:03:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > GENERIC DAL

GENERIC DAL


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 937 / 138

Auteur : zebobo5

Ecrire un message privé
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

Les Membres Club peuvent 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

 Sources du même auteur

Source .NET (Dotnet) LANCER LES OPTIONS D'IMPRESSION D'UNE IMPRIMANTE
Source avec Zip Source avec une capture Source .NET (Dotnet) SQL2005SCRIPTEXTRACTOR (POUR SUBVERSION(SVN))
Source avec Zip Source .NET (Dotnet) JOUER AVEC VOS SHORTCUTS (AJOUT, SUPPRESSION, MODIFICATIONS)
Source .NET (Dotnet) CONFIGURATION XP FIREWALL

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) DEMO_XML_BASE_DE_DONNÉES par DanMor498
Source avec Zip Source avec une capture Source .NET (Dotnet) EXPORTER SCRIPT SQL SQL SERVER (CREATE - DROP - INSERT - TAB... par citt
Source avec Zip Source .NET (Dotnet) BULKINSERT EN C# par Malkuth
Source avec Zip Source avec une capture Source .NET (Dotnet) SPLIT SQL SANS TABLE TEMPORAIRE par TheOnlyMaX
Source avec Zip Source .NET (Dotnet) MOTEUR CSV ET RECORDSET PERSO par SwitchApocalyps

 Sources en rapport avec celle ci

Source .NET (Dotnet) REFLECTION .NET par Yxion
Source avec Zip Source .NET (Dotnet) CONVERTIR UN OBJET EN DATATABLE ET VICE-VERSA par sebmafate
Source avec Zip Source .NET (Dotnet) UN PETIT DEMINEUR EN C# AVEC VISUAL STUDIO 2005 par Viden

Commentaires et avis

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

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 ORM for compact framework [ par sourria ] salut tout le monde alors ma question c'est la suivante: je veux savoir es que il existe un ORM pour compact framework tel le NHIBERNATE ou ADO.NET


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,292 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales