Bonjour !
Soyons clair, moi et les bases de données (relationnelle ou non, payantes ou gratuite, MS ou Oracle ou [placer ici votre éditeur favoris]) on est pas copains copains.
Je n'y connais pas grand chose, pour ne pas dire "rien".
Je sais qu'il existe tout pleins de framework pour accéder aux données de manière plus ou moins transparente. Je ne les connais pas tous et je n'ai pas le temps de tous les étudier, aussi j'aimerai votre avis sur ce que je devrais choisir pour répondre le plus possibles à ce que j'aimerais :
- Je voudrais avoir des classes qui mappent une table (table "A" -> classe "A", une colonne = une propriété, ...). Ca normalement ils le font tous (enfin j'espère)
- Je voudrais que ces classes puissent être modifiées pour que je puisse y ajouter des propriétés/méthodes qui n'ont de sens qu'au runtime (donc des choses qui ne sont pas mappées à la base de donnée). Exemple :la table contient 2 champs, donc la classe contient également deux propriétés, et moi je veux pouvoir ajouter une troisième propriété qui calcul un hash des deux premières, hash qui n'est pas stocké en base puisqu'il n'a de sens qu'au runtime du programme.
- Je voudrais pouvoir créer directement les classes plutôt que les tables (je ne suis pas à l'aise avec le SQL). En conséquence, les classes (ou un objet capable de lire ma classe) aurait une méthode qui permettrait de créer la table sur la base de donnée à laquelle je suis connecté.
Exemple :
Dans mon exemple, j'aimerai que mon DataAccess accepte plusieurs types de bases de données, SQL Server est le minimum vital, mais s'il accepte un truc plus généric ca serait bien.
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class User { public string Login{ get; set; } public string Password {get; set;} } //.... DataAccess da = new DataAccess(new SqlConnection("...")); da.CreateTable(typeof(User));
De même qu'il faut pouvoir créer la table via la classe, il faudrait pouvoir détruire la table, vérifier qu'elle existe.
Si ca pouvait également vérifier que la classe n'a pas été modifiée après la création de la table ca serait génial mais bon c'est pas capitale non plus.
- Je ne cherche pas un truc qui gère toute la complexité que les bases de données peuvent offrir.
Mes données seront stockées dans des tables avec clef primaire et si possible clef étrangère. Des champs simples (texte, nombre, date, mais pas de truc poussé genre énum, XML, filestream ou je ne sais quoi).
Une clef étrangère doit donner lieu à une propriété sur une classe qui permet d'obtenir la collection d'objet enfants. Je me moque complètement qu'il y ai gestion ou non des contraintes d'intégrité/de cascade, je ferai avec/ou sans.
Pas de vues, pas de jointure, ou je ne sais quoi. Une gestion très basique des tables me suffit.
Pour faire simple, je veux pouvoir créer des classes, pouvoir enregistrer/charger les données de ces classes dans une base de données sans faire de requête. ex: "MonObjet.Save()"
Et la structure des tables doit être créée à partir des classes (et non l'inverse). (Même si ca veut dire que je dois taper à la main les attributs, les héritages, ou je ne sais quoi d'autre)
Évidemment je ne suis pas contre un outil type designer, mais si il n'y en a pas je vais pas pleurer non plus.
Sachant tout cela, quelle solution choisir ? Je sais qu'il existe pleins de choses genre Linq To Object ou EntityFramework, ou je ne sais quoi d'autre. Mais je ne sais pas ce qu'ils permettent de faire, dans quelle mesure ils répondent à mes besoin, etc.
Contraintes technique : Visual Studio 2008 maximum, Framework 3.5 sp1 maximum.
Partager