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

Accès aux données Discussion :

[EF] Une utilisation est-elle possible de façon optimale avec SQLite ?


Sujet :

Accès aux données

  1. #1
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut [EF] Une utilisation est-elle possible de façon optimale avec SQLite ?
    Salut,

    J'aurais besoin d'une petite clarification sur Entity Framework...

    J'avais cru comprendre qu'on pouvait l'utiliser avec n'importe quel provider ADO.NET, mais maintenant j'ai un doute, notamment en lisant ça, ou encore ça...

    J'ai commencé à migrer une application de Linq to SQL vers EF (j'avais utilisé SQL Server parce que je n'avais pas le choix, mais je souhaite utiliser SQLite). J'ai donc généré le mapping à partir de la base SQLite, j'ai fait tout plein de modifs dans mon appli pour utiliser le modèle EF à la place du dbml, et ça fonctionne bien tant que je ne modifie pas les données. Par contre, dès que j'essaie de faire un SaveChanges, je me fais jeter !
    - soit j'ai déjà initié explicitement une transaction avec BeginTransaction, et dans ce cas j'ai l'exception suivante :
    UpdateException:
    An error occurred while updating the entries. See the InnerException for details.
    InnerException: ArgumentOutOfRangeException:
    Not associated with a connection
    Nom du paramètre*: SQLiteTransaction
    - soit je ne m'occupe pas de la transaction, et j'ai l'exception suivante :
    SQLiteException:
    SQLite error
    cannot rollback transaction - SQL statements in progress
    Bref, dans un cas comme dans l'autre, je ne peux pas faire mon SaveChanges

    Donc, avant de passer encore des heures à chercher ce qui ne va pas, j'aimerais bien savoir si ce que je cherche à faire (utiliser EF avec SQLite) est possible ! Sachant que le provider ADO.NET que j'utilise est celui de Phoenix Software, qui est supposé supporter EF...

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par tomlev Voir le message
    qui est supposé supporter EF...
    EF, qui est toujours en version Beta

    Je veux dire par là qu'il s'agit p-e d'un bug dû au status/niveau du FX ?

  3. #3
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Je sais pas trop...
    J'ai déjà passé pas mal de temps à analyser le code avec Reflector, mais je suis un peu perdu.
    D'ailleurs je ne comprends pas trop comment gérer les transactions avec EF : avec Linq To Sql, il y avait dans DataContext une propriété Transaction, qui n'existe plus dans ObjectContext... je viens de trouver quelques trucs à ce sujet sur MSDN, je vais voir ce que je peux en tirer

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Citation Envoyé par tomlev Voir le message
    avec Linq To Sql, il y avait dans DataContext une propriété Transaction, qui n'existe plus dans ObjectContext...
    Avec Linq to SQL tu pouvais faire une transaction de cette manière:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    using(TransactionScope scope = new TransactionScope())
    {
       context.SubmitChanges)
       scope.Complete();
    }

    Pas besoin d'utiliser la propriété Transaction, pas besoin de try/catch, pas besoin de faire de rollback à la main. Je suppose que ça doit être pareil avec EF.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par The_badger_man Voir le message
    Avec Linq to SQL tu pouvais faire une transaction de cette manière:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    using(TransactionScope scope = new TransactionScope())
    {
       context.SubmitChanges)
       scope.Complete();
    }

    Pas besoin d'utiliser la propriété Transaction, pas besoin de try/catch, pas besoin de faire de rollback à la main. Je suppose que ça doit être pareil avec EF.
    oui, c'est ce que disent les pages MSDN que je suis en train de lire... je me penche là dessus

    merci

    Bon... j'ai trouvé un moyen pour que SaveChanges ne plante plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    context.SaveChanges(false);
    context.AcceptAllChanges();
    Mais :
    - ça ne marche pas toujours, et je ne vois pas ce qui fait que ça passe ou non
    - les changements ne sont pas commités, il doit y avoir une transaction implicite quelque part
    Si je mets ce code dans un bloc using(TransactionScope...), quand il sort du bloc j'ai la même erreur qu'avant :
    SQLite error
    cannot rollback transaction - SQL statements in progress
    Je sais plus quoi faire... les frameworks ORM de MS, que ce soit Linq to Sql ou EF, commencent à sérieusement me gonfler, j'ai que des em***des avec... je sens que je vais aller me renseigner sur NHibernate, ça au moins c'est supposé être fiable

  6. #6
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je sais plus quoi faire... les frameworks ORM de MS, que ce soit Linq to Sql ou EF, commencent à sérieusement me gonfler, j'ai que des em***des avec... je sens que je vais aller me renseigner sur NHibernate, ça au moins c'est supposé être fiable
    J'ai un peu ce sentiment aussi mais bon faut savoir que nhibernate c pas a l'exécution que c'est lourd mais a l'écriture du code et des fichiers de conf (mapping hbm).

  7. #7
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    de toutes façons je vais attendre la version finale d'EF avant de prendre une décision... c'est un projet perso, donc pas d'urgence

  8. #8
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Moi c'est surtout la V2 que j'attends et qui me fait bien saliver

    mais ça va être ... long ...

Discussions similaires

  1. [Toutes versions] Une requête est-elle possible ?
    Par florianne dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 07/04/2017, 21h51
  2. L'utilisation d'une variable dans une formule est-elle bloquante
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/11/2011, 11h09
  3. Réponses: 3
    Dernier message: 19/09/2011, 12h35
  4. Utilisation de composant sans Form est elle possible
    Par Hypollite76 dans le forum Composants VCL
    Réponses: 26
    Dernier message: 01/12/2005, 12h07
  5. une interpolation de forme est elle possible
    Par tetsuo chima dans le forum Flash
    Réponses: 3
    Dernier message: 07/10/2003, 16h31

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