Bonjour je publie un petit descriptif sur mon ORM. Pour savoir ce que vous en pensez, et surtout si ça intéresse quelqu'un!
Dans quelques jours je publierai les sources sur codeplex.

Les buts :
Donner au framework dotnet une couche d’accès données simple et rapide permettant de modéliser facilement les tables d’une base de données. Basé sur ADO.net, il permet un mapping objet rapide des retours de requêtes. De plus SimplestORM permet de faire gagner du temps au développeur en lui enlevant toutes les taches ingrates à écrire : méthode de remplissage d’objet, pré-écriture des requêtes courantes, gérer l’abstraction du SGBD.

Simple :
Le développeur à juste à écrire les classes entités représentant les lignes des tables. Et oui il n'y a pas 15 000 fichiers de configuration a éditer!
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
public class User
{
    public long Id { get; set; }
    public string MailAdress { get; set; }
    public string Password { get; set; }
    public DateTime InscriptionDate { get; set; }
    public bool IsAdmin { get; set; }
}

Contrairement aux autres frameworks ORM ces entités n’ont pas besoin d’hériter d’un objet du framework pour pouvoir mapper correctement les requêtes.(POCO)
Une fois la classe entité écrite, le framework peut générer toutes les requêtes simples (SELECT * [WHERE][ORDER BY], DELETE, INSERT, UPDATE). Voici un exemple démontrant qu’il est enfantin de requêter sur une base de données :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
ICollection<User> alluser = .....;
using (myDAL = new SimplestORM(@"machainedeconnexion", new MySQLProvider()))
{
    myDAL.SelectAll<User>(alluser );
}

Le retour des requêtes de type select est une List<T> générique, ou tout autre collection générique implémentant l’interface ICollection<T>.
Ce qui permet par exemple d’avoir comme retour de requête des ObservableCollection<T>…
Auto-gestion des connexions/déconnexions :
Par défaut les méthodes de requetages ouvrent la connexion automatiquement, si celle-ci n’est pas ouverte, et la referme en fin d’utilisation de l’objet d’accès données.

Sécurisé :
Les requêtes ayant des clauses where générées par l’ORM sont toutes des requêtes paramétrées, elles sont donc auto-protégées des injections SQL.
Les requêtes écrites via les méthodes de l’ORM sont sûres, pas besoin de lancer l’application pour savoir si elles marchent.

Une couche d’abstraction :
SimplestORM générant les requêtes basiques celui-ci gère aussi l’abstraction envers le SGBD, SimplestORM peut donc s’utiliser - sans modifier une ligne de code - avec plusieurs type de SGBD très différents. SQLServer (2k5, 2k8), MySQL, Access, SQLite…

Personnalisable:
Une méthode sur la DAL permet de faire n’importe quel type de requête et de mapper son retour Une autre méthode permet de mapper n’importe quel retour de requêtes de type IDataReader, grâce à la méthode FillICollection.
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
public void FillICollection(DbCommand cmd, ICollection<T> collection)
Les noms des propriétés des entités peuvent différer des noms des champs des tables. Très rapidement on peut configurer une entité grâce à des attributs que l’on place sur les propriétés ou sur l’entité elle-même.
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
[EntityTableName("Utilisateur")]
public class User
{
    public long Id { get; set; }
    public string MailAdress { get; set; }
    [EntityProperty(RealName="MotDePasse")]
    public string Password { get; set; }
    public DateTime InscriptionDate { get; set; }
    public bool IsAdmin { get; set; }
    [EntityIgnoreProperty]
    public bool IgnoredProperty { get; set; }
}

Et les performances dans tout ça ??

SimplestORM utilisant la réflexion combinée, la génération de code MSIL est très rapide. Sur les retours de requêtes SQL de plus de 20 000 éléments à mettre en RAM, celui-ci va deux fois plus vite que la méthode Fill des DataAdapter de ADO.net.

Ce vers quoi le projet n’évolura jamais:
Le projet ne permettra pas de générer n’importe quelle rêquete SQL. SimplestORM permet de générer les requêtes basiques qu’on a besoin de faire souvent, le reste des requêtes peuvent être écrites en SQL, et mappées grâce aux méthodes FillICollection ou FillList.
Je veux que celui-ci reste très simple d’utilisation et qu’on reste tout de même très proche du code SQL envoyé SGBD.

Liscence :
LGPL V3

Nom du projet :
SimplestORM. Pour l’instant j’ai opté pour ce nom… Je n’arrive pas trop à me fixer. Il faudrait faire ressortir deux choses dans le nom : la simplicité d’utilisation de l’ORM et qu’il est destiné à la plateforme dotnet.

Statut du développement :
Dernier tests avant publication

RoadMap :
-Ajouter la propriété TypeConveter dans l’attribut EntityProperty permettant de convertir n’importe quel type dotnet en valeur SQL.
-Documentation

Développeur et projet :
J’ai écrit cet ORM pour mes besoins lorsque j’étais sur un projet nécessitant une modélisation objet de la base de donnée. Celui-ci a vivoté ainsi deux ans. En fonction du temps que j’avais à y consacrer.
Ayant remplacé récemment la partie du code utilisant la réflexion par une partie réflexion/création dynamique de MSIL, j’ai enfin atteint de très bonnes performances sur des gros volumes de données à traiter.
Depuis j’ai donc décidé de faire une refonte de mon architecture globale pour rendre le projet plus modulaire et enfin pouvoir le publier sur Developpez.com et codeplex.