begin process at 2008 07 21 03:35:27
1 213 565 membres
33 nouveaux aujourd'hui
14 167 membres club

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 !

[ CS2GEN ] - GENERATEUR DE CODE NTIERS POUR BASES DE DONNÉES (V 2.1)


Information sur la source

Catégorie :Applications Source .NET ( DotNet ) Classé sous : access, sqlserver, xml, cache Niveau : Initié Date de création : 04/07/2007 Date de mise à jour : 31/08/2007 01:42:30 Vu / téléchargé: 8 692 / 818

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

Cette application ne génère du code ne pouvant être utilisable qu’à partir du Framework .NET 2.0

Cette application est un peu la version 2 d’un générateur de code que j’avais posté , je le poste en nouvelle source car de nombreuses personnes pourraient etre interessées par le précédent(qui génére du code VB.NET et C# pour le Framework .NET 1.0 et 2.0)

I - Présentation

Sont pris en charge :
- Génération couches BLL,BusinessObjects,DAL
- Caching (expirations disponibles : absolue (à une date donnée),relative(dans un certains temps),SqlDependency(le cache est vidé si une modification a lieue en base SQL Server),FilDependency(pour bases de données ACCESS ou autres fichiers xml,etc...)
- Serialization Xml (reposant sur les generics)
- librairie d’aide pour les predicats des listes generiques
- Le trie (IComparer)
- Génération des fichiers de configuration de l’application (App.config et Web.config) contenant les chaines de connexion
-       Encryption de la section connectionstrings des fichiers de configuration(App.config) possible
- Génération du script SQL (avec création des tables et procédures stockées/Views)
- Etc.



II Démarche :

1 – générer le code puis ouvrir la solution visual studio qui vient d'etre générée
2 - ajouter un projet pour la couche présentation :
- Windows Forms Application
- ASP.NET Application
- WPF Application
- …
3 – Ajouter une référence aux couches
>       BLL
> BusinessObjects
4 - Ajouter une référence aux librairies Cs2Gen.Caching.dll et Cs2Gen.Predicate.dll
5 – Ajouter le fichier de configuration dans la couche présentation
> App.config (Windows Forms ou WPF Application)
> Web.config  (ASP.NET Application)

Notes :
- la librairie Cs2Gen.Predicate.dll offre des facilités pour créer des predicats,
bien entendu vous pouvez utiliser les méthodes anonymes,les predicates(délégués) ou vos propres méthodes avec les generics

- la libraire Cs2Gen.Caching.dll est moins complète que celle d'enterprise library,toutefois
vous pouvez ici tres facilement ajouter une dépendance au cache avec SqlDependency(SQL Server)

Ce projet est disponible sur CodePlex(sources,runtime) >
http://www.codeplex.com/cs2gen

Bon les sources sont fournies xp
Profitez en car je risque de ne pas poster des sources aussi souvent
J’espère pour autant ne pas voir arriver des copies !!


il y a également un bon petit tutorial de Thomas Lebrun sur Developpez.com
http://morpheus.developpez.com/architecture/

lire une image d'une base de données ou insérer une image dans une base de données (méthodes qui sont générées et disponible dans la classe Utilities)
http://romagny13.over-blog.com/article-11277632.html


+

Source

  • //
  • // SAMPLES
  • //
  • BLLManager bLLManager = new BLLManager();
  • List<Contact> Contacts;
  • // Get all
  • Contacts = bLLManager.ContactBLL.GetContacts();
  • dataGridView1.DataSource = Contacts;
  • // get element(s) of relation
  • List<Contact> result = bLLManager.ContactBLL.GetContactsOfCategory(1);
  • Category category = bLLManager.ContactBLL.GetCategoryOfContact(contact);
  • // filter + sort (Business objects)
  • List<Contact> result = Contacts.FindAll(
  • PredicateBuilder<Contact>.MakePredicate(
  • PredicateExpression.StartsWith("Contactname", "A")
  • )
  • );
  • result.Sort(new Contact.ContactnameComparer(SorterMode.Ascending));
  • dataGridView1.DataSource = result;
  • // Add
  • bLLManager.ContactBLL.AddContact(new Contact(4, "Dupond", 25, 1));
  • // Update
  • Contact result = Contacts.Find(PredicateBuilder<Contact>.MakePredicate(
  • PredicateExpression.Eq("ContactID", 4)
  • )
  • );
  • result.Contactname = "Lama";
  • bLLManager.ContactBLL.UpdateContact(result);
  • // Delete
  • Contact result = Contacts.Find(PredicateBuilder<Contact>.MakePredicate(
  • PredicateExpression.Eq("ContactID", 4)
  • )
  • );
  • bLLManager.ContactBLL.RemoveContact(result);
  • //Xml Serialization
  • bLLManager.ContactBLL.SerializeContacts(@"c:\Contacts.xml", Contacts);
  • List<Contact> result = bLLManager.ContactBLL.DeserializeContacts(@"c:\Contacts.xml");
  • // caching sample : SQL Server (with SqlDependencyExpiration)
  • CacheManager cacheManager=new CacheManager();
  • if (cacheManager.Contains("myKey"))
  • {
  • Contacts =(List<Contact>) cacheManager.GetData("myKey").Value;
  • }
  • else
  • {
  • Contacts = bLLManager.ContactBLL.GetContacts();
  • cacheManager.Add("mykey", Contacts, new ICacheItemExpiration[] { new SqlDependencyExpiration(new SqlCommand("SELECT ContactID,ContactName,ContactFirstName,ContactAge From dbo.[Contact]", new SqlConnection("Data Source=.;Initial Catalog=ContactDB;Integrated Security=SSPI;"))) });
  • }
  • // caching sample : ACCESS database file (with FileDependency)
  • if (cacheManager.Contains("myKey"))
  • {
  • Contacts =(List<Contact>) cacheManager.GetData("myKey").Value;
  • }
  • else
  • {
  • Contacts = bLLManager.ContactBLL.GetContacts();
  • cacheManager.Add("mykey", Contacts, new ICacheItemExpiration[] { new FileDependency(@"C:\Contacts.mdb") });
  • }
            //
            // SAMPLES
            //
            BLLManager bLLManager = new BLLManager();
            List<Contact> Contacts;

            // Get all
            Contacts = bLLManager.ContactBLL.GetContacts();
            dataGridView1.DataSource = Contacts;

            // get element(s) of relation
            List<Contact> result = bLLManager.ContactBLL.GetContactsOfCategory(1);
            Category category = bLLManager.ContactBLL.GetCategoryOfContact(contact);

            // filter + sort (Business objects)
            List<Contact> result = Contacts.FindAll(
                PredicateBuilder<Contact>.MakePredicate(
                    PredicateExpression.StartsWith("Contactname", "A")
                    )
                );
            result.Sort(new Contact.ContactnameComparer(SorterMode.Ascending));
            dataGridView1.DataSource = result;

            // Add
            bLLManager.ContactBLL.AddContact(new Contact(4, "Dupond", 25, 1));

            // Update
            Contact result = Contacts.Find(PredicateBuilder<Contact>.MakePredicate(
                PredicateExpression.Eq("ContactID", 4)
                  )
               );
            result.Contactname = "Lama";
            bLLManager.ContactBLL.UpdateContact(result);

            // Delete
            Contact result = Contacts.Find(PredicateBuilder<Contact>.MakePredicate(
                PredicateExpression.Eq("ContactID", 4)
                  )
               );
            bLLManager.ContactBLL.RemoveContact(result);

            //Xml Serialization              
            bLLManager.ContactBLL.SerializeContacts(@"c:\Contacts.xml", Contacts);
            List<Contact> result = bLLManager.ContactBLL.DeserializeContacts(@"c:\Contacts.xml");
		

	   // caching sample : SQL Server (with SqlDependencyExpiration)
           CacheManager cacheManager=new CacheManager();
 	   if (cacheManager.Contains("myKey"))
            {
              Contacts =(List<Contact>) cacheManager.GetData("myKey").Value;
            }
            else
            {
                Contacts = bLLManager.ContactBLL.GetContacts();
                cacheManager.Add("mykey", Contacts, new ICacheItemExpiration[] { new SqlDependencyExpiration(new SqlCommand("SELECT ContactID,ContactName,ContactFirstName,ContactAge From dbo.[Contact]", new SqlConnection("Data Source=.;Initial Catalog=ContactDB;Integrated Security=SSPI;"))) }); 
            }
	    // caching sample : ACCESS database file (with FileDependency) 	    
            if (cacheManager.Contains("myKey"))
            {
                Contacts =(List<Contact>) cacheManager.GetData("myKey").Value;
            }
            else
            {
                Contacts = bLLManager.ContactBLL.GetContacts();
                cacheManager.Add("mykey", Contacts, new ICacheItemExpiration[] { new FileDependency(@"C:\Contacts.mdb") }); 
            }
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

05 juillet 2007 01:04:20 :
.
05 juillet 2007 13:01:30 :
. gestion complete des DBNULL
06 juillet 2007 02:41:02 :
. amélioration de la gestion types de données, tests , renommage dans la classe d'aide aux predicate (stringComparaison pouvait porter à confusion avec une autre enum stringComparison) ...
06 juillet 2007 12:37:50 :
.
06 juillet 2007 23:07:03 :
. ajout de classes pour les predicates (bool,Single,Decimal) + IsMatch basée sur les regex pour stringPredicate; pour ses classes je n'utilise pas les generics (System.Predicate<T>) car je trouves que ce n'est pas utile
07 juillet 2007 00:11:33 :
.
07 juillet 2007 11:09:45 :
. amélioration de la classe reposant sur DbProvider,simplification de la récupèration de la section ConnectionString(ainsi on peut aussi facilement y accèder depuis un site web avec Web.config que depuis une application windows avec App.config)
07 juillet 2007 14:33:12 :
.
08 juillet 2007 23:22:16 :
.
09 juillet 2007 01:19:57 :
.
10 juillet 2007 12:38:10 :
.
20 juillet 2007 02:32:56 :
. ajout méthodes GetElementsOf, retirer quelques bugs(et j'ai du en ajouter pas mal d'autres lol), gestion des modifications des tables et clés et repercussion sur les relations,etc.
20 juillet 2007 12:26:05 :
. utilitaire de suppression des prefix de tables(pour les classes qui vont etre générées) . mise en évidence des clés etrangères dans la treeview ...
20 juillet 2007 13:04:53 :
.
20 juillet 2007 18:40:09 :
.
22 juillet 2007 16:53:28 :
. amélioration du systme de filtrage(PredicateBuilder + PredicateExpression + BinaryPredicate + IPredicate) sur la couche business Objects
22 juillet 2007 17:06:28 :
. nouvelle capture
22 juillet 2007 17:06:57 :
.
22 juillet 2007 17:26:38 :
.
24 juillet 2007 00:21:04 :
. amélioration de la gestion des types,ajout d'une classe utilities permettant d'ecrire et lire des images dans une base de données,amélioration de la classe de gestion du cache(cache strategy)
25 juillet 2007 23:33:41 :
. on est proche de la version finale .. réécriture de la classe pour DbProviderFactory(amélioration,allégement,optimisation),simplification cache(plus simple,efficace),prise en charge de la récupération des clés auto incrémentées pour SQL Server(SCOPE_IDENTITY() dans requetes et procedures stockées),allégement ,amélioration du code couches BLL,DAL,etc.
02 août 2007 13:03:25 :
.
05 août 2007 00:05:30 :
. meilleur ciblage selon le type d'application > desktop(windows forms,wpf,etc.) ou web(pour une meilleure intercation avec les objectDataSources de ASP.NET 2.0) + reorganisation du code
05 août 2007 21:58:30 :
.
05 août 2007 22:12:26 :
.
06 août 2007 01:23:06 :
.
18 août 2007 11:21:15 :
. amélioration du cache (désormais il faut ajouter une référence à la dll Cs2Gen.Caching.dll) ... les expirations disponibles du cache sont : absolue (à une date donnée),relative(dans un certains temps),SqlDependency(le cache est vidé si une modification a lieue en base SQL Server),FilDependency(pour bases de données ACCESS ou autres fichiers xml,etc...) . encryption de la section connectionstrings des fichiers de configuration(App.config) possible . renommage des classesde la couche BLL .etc.
18 août 2007 11:32:58 :
.
19 août 2007 00:58:34 :
.
30 août 2007 13:19:56 :
. ajout de l'attribut System.ComponentModel.DataObjectMethodAttribute qui permet automatiquement de selecionner les méthodes select,add,update,delete pour les objectdatasource (ASP.NET)
31 août 2007 00:30:11 :
. Cs2Gen.Predicate.dll,...
31 août 2007 00:43:24 :
.
31 août 2007 01:42:30 :
.
  • signaler à un administrateur
    Commentaire de bu78 le 05/07/2007 15:01:53

    Bonjour, je réalise un projet similaire depuis pas mal de temps déjà, englobant le maximum de règles organisationnelles possible.
    J'ai donc été particulièrement interessé par ces sources. Avant tout, donc, Merci.

    J'ai noté quelques petites corrections à faire (à moins que le point ne m'échappe, ce qui est tout à fait possible).
    Les voici :

    Le type "TinyInt" est vu comme un type "Image". Ce point impacte bien sur le code SQL généré mais aussi le type des parameters créés dans le DAL.

    Dans le DAL, sur les méthodes Add et Update, il me semble que tu as oublié d'utiliser les propriétés de l'objet passé en paramètre. System.DbNull.value est passé pour chaque propriété (à moins que ce ne soit volontaire ...)

    Exemple :
    oDbCommand.Parameters.Add(DbProviderManager.CreateParameter("@Reference",DbType.String,DBNull.Value));

    En lieu et place de :
    oDbCommand.Parameters.Add(DbProviderManager.CreateParameter("@Reference", DbType.String, oEnumeration.Reference ));

    Sinon, ce projet est interessant, rapide, efficace, le code généré est lisible, efficace ... Une bonne base.

  • signaler à un administrateur
    Commentaire de romagny13 le 05/07/2007 20:05:08

    je prends un exemple:
    if (oContact.ContactAge.HasValue)
    oDbCommand.Parameters.Add(DbProviderManager.CreateParameter("@ContactAge",DbType.Int32,oContact.ContactAge));
    else
    oDbCommand.Parameters.Add(DbProviderManager.CreateParameter("@ContactAge",DbType.Int32,DBNull.Value));

    je ne passe une valeur nulle que si le nullable reçu n'a pas de valeur (HasValue)
    les nullables et DBNull.value permettent de gérer les champs en base de données acceptant les valeurs nulles(AllowDBNull)

    au niveau des types de données il est possible qu'il y ait en effet quelques points à revoirau niveau des images)

    sinon ce n'est pas ^parfait encore et il faudrait par exemple que je vois comment améliorer la gestion de la connexion, même si je ne suis pas pour l'utilisation de singleton
    +

  • signaler à un administrateur