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

Entity Framework Discussion :

Repository Pattern et EntityFramework 3.5


Sujet :

Entity Framework

  1. #1
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut Repository Pattern et EntityFramework 3.5
    Bonsoir,

    Dans mon projet asp.net mvc 2, je dois récupérer les données d'un fichier Excel et les insérer dans une base sql server.

    Pour mes accès aux données, j'ai suivi le modele du projet IComplain http://icomplain.codeplex.com/

    Ci joint, le code pour le repository qu on trouve dans le projet IComplain

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    public abstract class BaseRepository<T> where T : class, new() 
        {
            private SGDEntities _objCtx;
            protected internal SGDEntities ObjectContext
            {
                get
                {
     
                    if (_objCtx != null)
                        return _objCtx;
     
                    if (ObjectContextScope<SGDEntities>.CurrentObjectContext != null)
                        return ObjectContextScope<SGDEntities>.CurrentObjectContext;
     
                    new ObjectContextScope<SGDEntities>();
                    return ObjectContextScope<SGDEntities>.CurrentObjectContext;
                }
            }
     
            protected BaseRepository()
            {
            }
     
            protected BaseRepository(SGDEntities context)
            {
                _objCtx = context;
            }
     
     
            public void Update(T dto)
            {
                try
                {
     
                    ObjectContext.SaveChanges();
                }
                catch (OptimisticConcurrencyException)
                {
                    System.Diagnostics.Debug.WriteLine("OptimisticConcurrencyException occurred, "
                        + "attempting to resolve ...");
                    ObjectContext.Refresh(RefreshMode.StoreWins, dto);
                    ObjectContext.SaveChanges();
                    System.Diagnostics.Debug.WriteLine("Concurrency confliction resolved.");
                }
                catch (SqlException se)
                {
                    throw new ApplicationException("An exception occurred while saving your changes", se);
                }
                catch (Exception ex)
                {
                    throw new ApplicationException("An exception occurred while saving your changes", ex);
                }
            }
     
            public void Delete(T dto)
            {
                ObjectContext.DeleteObject(dto);
                Update(dto);
            }
     
            protected virtual IQueryable<T> LoadResult(IQueryable<T> result, int loadOption)
            {
                throw new NotImplementedException();
            }
        }
    Jusque la pas de problème d'implémentation.

    J'ai créé ensuite une entité qui va faire la liaison entre ce que je récupère du fichier Excel et l'entité de ma bdd



    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public void CreateOrUpdate(SGDChangement changementSGD)
            {
     
                var sgd = FindUniqueSGDByName(changementSGD.NumSGD);
     
                //le numéro SGD existe en Base
                try
                {
                    if (sgd != null)
                    {
     
                        sgd.IssueDate = changementSGD.IssueDate;
                        sgd.Applicant = changementSGD.Applicant;
                        sgd.Beneficiary = changementSGD.Beneficiary;
                        sgd.BeneficiaryEntity = changementSGD.BeneficiaryEntity;
                        sgd.Description = changementSGD.Description;
                        sgd.PlannedDate = changementSGD.PlannedDate;
                        sgd.Description = "test";
                        Update(sgd);
                    }
                    else
                    {
                        Create(changementSGD);  
                    }
     
                }
                catch (Exception exp)
                {
                    throw exp;
                }
            }
    Pourtant lorsque j'essaie de rajouter à la base j'ai l'erreur erreurs suivantes :
    String or binary data would be truncated. The statement has been terminated
    Je me suis dit que ca venait d'un champ description et j'avais raison ... donc j'ai tenté de faire un traitement en retirant les \n \t etc etc mais rien à faire, je ne peux pas l'insérer.et je n'arrive pas à voir quel caractère pourrait poser problème. Surtout que dans mes TU, si je copie colle la chaîne de caractère, je n'ai pas de soucis

    Mon 2e problème vient de la mise à jour... encore une fois, aucun problème quand je fais lance la méthode en TU.
    Mais quand je passe par l'intégration de la méthode, l'exception suivante m'est retournée
    Violation of PRIMARY KEY constraint ...
    et pourtant je ne crée pas une nouvelle ligne comme il a trouvé ma ligne juste avant (je l'ai vérifié) ...

    Une idée ?

    Merci !

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Pourtant lorsque j'essaie de rajouter à la base j'ai l'erreur erreurs suivantes : String or binary data would be truncated. The statement has been terminated
    Je me suis dit que ca venait d'un champ description et j'avais raison ... donc j'ai tenté de faire un traitement en retirant les \n \t etc etc mais rien à faire, je ne peux pas l'insérer.et je n'arrive pas à voir quel caractère pourrait poser problème. Surtout que dans mes TU, si je copie colle la chaîne de caractère, je n'ai pas de soucis
    Cela vient simplement du fait que vous tentez d'insérer une chaine trop longue dans une colonne de votre table.

    Exemple :'avion' dans un VARCHAR(3).

    Pensez donc à limiter vos zones de saisies en fonction de la taille des colonnes.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Mais quand je passe par l'intégration de la méthode, l'exception suivante m'est retournée Violation of PRIMARY KEY constraint ...
    Si c'est bien un update, c'est que vous mettez à jour votre primary key avec une valeur déjà existante...

    Pouvez vous poster votre requête?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  4. #4
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Cela vient simplement du fait que vous tentez d'insérer une chaine trop longue dans une colonne de votre table.

    Exemple :'avion' dans un VARCHAR(3).

    Pensez donc à limiter vos zones de saisies en fonction de la taille des colonnes.
    J'avais mis nvarchar(1000) je pensais que ca suffirait mais apparemment non ... du coup j'ai mis nvarchar(max) pour le champ.!

  5. #5
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    En revanche n'utilisez NVARCHAR que si vous comptez internationaliser votre application...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  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
    Comment etre sur qu'on ne voudra jamais rendre son application multi langue ?

  7. #7
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Citation Envoyé par iberserk Voir le message
    En revanche n'utilisez NVARCHAR que si vous comptez internationaliser votre application...
    Pourquoi? J'ai cru comprendre que nvarchar c'est pour les champs dont on ne connait pas spéficiquement la longueur... Un champ description me parait bien adapté non?

  8. #8
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Si c'est bien un update, c'est que vous mettez à jour votre primary key avec une valeur déjà existante...

    Pouvez vous poster votre requête?
    Merci ! J'ai trouvé la réponse ... J'avais un problème de contexte!

    J'avais créé une liste d'éléments qui était du meme type que celui en base. Le probleme est que qd je faisais une création ou un update, il me mettait toute la liste à jour et pas 1 à 1 ... je ne sais pas si je me suis bien fait comprendre ^^

    Je mets à résolu par contre, je veux bien la réponse pour la différence entre nchar et nvarchar!

    Merci

  9. #9
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Pourquoi? J'ai cru comprendre que nvarchar c'est pour les champs dont on ne connait pas spéficiquement la longueur... Un champ description me parait bien adapté non?
    Pardon j'ai manqué de précision je voulais dire qu'il faut préférer VARCHAR à NVARCHAR dans le cas ou on a pas à gérer en même temps plusieurs langues et dont certaines contiennent des caractère 'non latins' (hebreux,japonais etc.)
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  10. #10
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Comment etre sur qu'on ne voudra jamais rendre son application multi langue
    rester en VARCHAR si ce n'est pas le cas, si un jour vous devez repasser en NVARCHAR il est très simple de le faire via un script...

    NVARCHAR code chaque caractère sur deux octets au lieu d'un pour VARCHAR...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

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

Discussions similaires

  1. Repository pattern et clause Where
    Par mkl238 dans le forum C#
    Réponses: 6
    Dernier message: 28/11/2011, 14h01
  2. repository pattern NLayer
    Par rvzip64 dans le forum Développement Windows
    Réponses: 0
    Dernier message: 27/09/2011, 10h29
  3. WPF et Repository Pattern
    Par CaptainChoc dans le forum Windows Presentation Foundation
    Réponses: 13
    Dernier message: 09/09/2011, 09h51
  4. MVVM - Repository Pattern
    Par Xxbz3 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 30/12/2010, 21h56
  5. Exemple simple utilisant le repository pattern
    Par Arthis dans le forum ASP.NET
    Réponses: 6
    Dernier message: 04/11/2008, 11h24

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