[ cs2gen ] - generateur de code ntiers pour bases de données (v 2.1)

Soyez le premier à donner votre avis sur cette source.

Vue 21 052 fois - Téléchargée 2 047 fois

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 / Exemple :


//
            // 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") }); 
            }

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

bu78
Messages postés
2
Date d'inscription
lundi 2 janvier 2006
Statut
Membre
Dernière intervention
5 juillet 2007
-
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.
romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2 -
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
+
romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2 -
a quoique merci tu viens de me montrer une erreur :p (DBNull)
ba je corrige
oui si vous voyez des erreurs n'hesitez pas à m'en faire art
autant que je mette l'application le plus au point possible
ou si vous avez des idées notamment au niveau de la gestion de la connexion
++
romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2 -
pour le tinyint c'est parce qu'on recupere le datatype system.byte(System.Byte)lors de la récupération du schema de la table, et donc c'est confondu avec une image(dont le type est System.Byte[])
bon il faudra que je pousse la gestion des types de données un peu plus
cs_girardhenri
Messages postés
4
Date d'inscription
samedi 12 mai 2007
Statut
Membre
Dernière intervention
14 février 2009
-
Merci pour ce code qui tourne très bien sur orcas avec net2genxx
Après conversion le code compile super :)
Henri

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.