IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

mapper des objets sur une table de sqlite [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut mapper des objets sur une table de sqlite


    voilà je débute completement sous C#, je suis pas un grand fan de microsoft et en plus ca fait treeees longtemps que je n'ai pas fait de client lourd...

    ==> donc d'avance, pardon si les questions sont triviales

    je viens de passer un moment à éplucher la faq dvp, de la doc, des sites...

    voilà je voudrais stocker ma data dans une base sqlite. J'avais bcp aimé sqlite avec ruby et il m'a donc semblé tout naturel de l'utiliser dans mon 1er projet c#.

    bon j'ai monté la base sqlite, les tables, les attributs, tout ca.

    et là je cherche un peu la "librairie", le "moteur d'accès aux données", enfin le "truc" qui dans C# va me permettre de charger ma data (je cherche une sorte de rake quoi...)


    Prenons un exemple simple :
    coté sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE [personnes] (
    [id] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
    [nom] VARCHAR(50)  NULL,
    [prenom] VARCHAR(50)  NULL
    )
    peuplons un peu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO 'personnes' ('nom', 'prenom') VALUES ('Dubois', 'Michel');
    INSERT INTO 'personnes' ('nom', 'prenom') VALUES ('Dubois', 'Jack');
    INSERT INTO 'personnes' ('nom', 'prenom') VALUES ('Dubois', 'Pierre');
    Bon maintenant coté code je cherche un équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Using System.Data.SQLite; 
    Using ma_super_lib_ou_un_truc_du_genre_qui_va_taper_dans_sqlite;
     
    DatabaseConnectivityEngine monsqlite = 
      new DatabaseConnectivityEngine("DBMS=sqlite3;databaseFile='./monfichier.db'");
     
    DatabaseConnectivityTable personne = 
      new DatabaseConnectivityTable(monsqlite, "personne");
     
    personne.load("id=1");
     
    Console.WriteLine("id:   \n{0}", personne.getId());
    Console.WriteLine("prenom:   \n{0}", personne.getPrenom());
    Console.WriteLine("nom:   \n{0}", personne.getNom());
     
    // ca devrait afficher :
    // id : 1
    // prenom : Michel
    // nom : Dubois
    je sais pas... il me semblait qu'un truc pareil serait fourni dans c#
    pourtant je ne vois que des exemples où je dois taper mon propre sql pour charger les objects...
    ou alors je dois écrire les classes qui mappent mes tables...

    et puis quoi encore ?

    j'ai du rater un truc trivial je pense mais je n'arrive pas à savoir quoi...
    j'ai entendu parler de db4o mais ca n'a pas l'air natif c# / .net
    sur http://dotnet.developpez.com/cours/?...harp#sqlservcs, il est question de Persistent Object (une API tierce ?), de Entity Framework...

    c'est pas bien clair tout ca.

    qqn a une idée ?


  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il existe un provider SQLite pour .NET, mais il n'est pas fourni en standard avec le .NET Framework. C'est un projet open source que tu peux trouver ici :
    http://sqlite.phxsoftware.com/

    En C# (et en .NET en général), les accès aux données se font suivant le modèle ADO.NET, avec des objets "connexion", "commande", "datareader"... Tu peux trouver un tuto ici :
    http://dotnet.developpez.com/articles/ado1/csharp/
    Le tuto concerne SQL Server, mais comme le modèle est le même, c'est valable aussi pour les autres SGBD. Il faut juste remplacer "SQLConnection", "SQLCommand" etc par "SQLiteConnection", "SQLiteCommand", etc...

    Ces classes permettent d'effectuer des requêtes SQL sur la base, mais si tu veux "mapper des objets sur des tables", il te faut un ORM (Objet Relational Mapper). Il y en a plusieurs disponibles en .NET : Linq to SQL (spécifique à SQL Server), Entity Framework, NHibernate, Subsonic... et beaucoup d'autres. Linq to SQL et Entity Framework sont faits par Microsoft et sont fournis avec le .NET Framework. Il y a encore assez peu de providers qui savent gérer Entity Framework, mais tu as de la chance, le provider SQLite en fait partie

  3. #3
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut
    merci tomlev d'avoir mis des mots sur ce que je cherche.

    déjà pour http://sqlite.phxsoftware.com/ j'avais déjà trouvé.

    ca ne me gène pas vraiment que la lib soit externe (bref pas incluse dans le framework .net). De toute facon au déploiement si j'ai bien suivi il suffit de mettre le System.Data.SQLite.dll dans l'installer et c'est réglé (enfin à peu pres...)

    ce qu'il me faut c'est un ORM donc (le terme m'échappait :p)

    comment ca se fait qu'il en ait plusieurs ? enfin je veux dire, celui de Microsoft ne convient pas ? (en 2010, rendu à la version 3.5 du .net framework ca m'étonnerait qd meme...)

    en tout cas
    Alors que LinQ to SQL propose seulement un mapping "Une classe = Une table", la nouvelle solution de mapping objet-relationnel de Microsoft, nommée Entity Framework propose une approche bien plus avancée.
    (source: http://pmusso.developpez.com/tutorie...troduction/#L0)

    donc c'est LinQ qu'il faut que je regarde. ca sera largement suffisant comme 1ere approche.
    et ca tombe bien parce que dans le package de http://sqlite.phxsoftware.com/ il y a bien un System.Data.SQLite.Linq.dll

    donc on dirait bien qu'il ne me reste eplus qu'à creuser ce que peut me faire System.Data.SQLite.Linq.dll non ?

  4. #4
    Membre très actif
    Avatar de teddyalbina
    Homme Profil pro
    Développeur .Net,C++
    Inscrit en
    Janvier 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .Net,C++

    Informations forums :
    Inscription : Janvier 2008
    Messages : 466
    Par défaut
    Je ne connais pas encore bien entity framework mais avec linq ms fournit dans le sdk un outil sqlmetal qui permet de générer les fichiers de mapping linq to sql pour les autres db que sql server

    http://msdn.microsoft.com/fr-fr/library/bb386987.aspx

  5. #5
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut
    je vais regarder sqlmetal, merci pour le tip

    à la lecture de http://www.developpez.net/forums/d43...apping-csharp/ (pas fini encore)

    je me demande si ce qu'il me faut n'est pas tout simplement Castle ActiveRecord

    si c'est vraiment comme le activerecord de ruby, ca me séduit vachement. ca serait les doigts dans le nez, je code avec les pieds et ca marche qd meme

  6. #6
    Membre éclairé

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Par défaut
    Apres pas mal de lecture et d'essais, j'ai finalement arreté mon choix -- pour l'instant - sur SubSonic.

    Etant donné le scope du projet :
    * petit, un client lourd seulement
    * design simple et épuré
    * gratuit
    * la database sqlite (ie le remplacant du fopen() quoi ) est amené à bcp évoluer au fur et à mesure de l'avancement du projet et je veux que tout suive rapidement
    * je suis assez fan de l'approche de ror et j'ai retrouvé la mm philosophie avec subsonic
    * ca fait la job vite et bien et ca n'entrave pas, ce truc a vraiment marché pour moi en qqs minutes

    ==> subsonic couplé à sqlite.NET me satisfait pour le moment

    pour autant, n'oublions pas qu'on peut aussi faire n'importe quoi avec de l'ORM, voire ne pas arriver à faire ce qu'on veut. Je me permet de renvoyer à la lecture de : http://www.developpez.net/forums/d76...-performances/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dock des objets sur une fenêtre
    Par digital prophecy dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 10/08/2006, 17h14
  2. [MySQL] Perte des droits sur une table ??
    Par Mystic eyes dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 05/07/2006, 16h40
  3. [ASE][T-SQL]droits des user sur une table...
    Par arona dans le forum Sybase
    Réponses: 3
    Dernier message: 11/05/2006, 21h48
  4. Réponses: 13
    Dernier message: 09/05/2006, 16h30
  5. Ordre de sélection des lignes sur une table DB2
    Par Pierre Formosa dans le forum DB2
    Réponses: 1
    Dernier message: 26/04/2006, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo