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

ASP.NET MVC Discussion :

ASP.NET MVC Changer de base de données cible pour EF


Sujet :

ASP.NET MVC

  1. #1
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    Par défaut ASP.NET MVC Changer de base de données cible pour EF
    Bonjour à tous, j'ai besoin de vos lumieres.

    Donc je dois développer une application avec ASP.NET MVC3. Je debute totalement avec ce langage bien que je sois famillier avec le concept MVC et les frameworks (Zend). J'ai Visual studio 2010 qui intègre apparement une base de données SQL server compact edition 4.0.0. J'ai donc realisé les tutos du site officiel sans probleme. Maintenant je souhaite passer au dev de mon appli qui doit s'appuyer sur un sql server 2008 express. Et là...ben je sais pas comment faire... depuis 1 semaine, je cherche des <connectionString> dans le webConfig, sans succes. D'apres ce que j'ai compris:

    - le Entity Framework s'appuie sur 3 fichiers concaténé dans un .mdf.
    -Le EF genere la base a partir des modeles
    -Pour savoir où générer cette base, il va voir le Web.Config, et prend la connectionString dont le name = nomDeMonDBContext

    Actuellement, j'ai supprimer la base compact edition. J'ai une base sql server 2008 qui tourne avec un user créé MVC sans mdp, bien que je ne pense pas que ce soit utile. Sur ce server, j'ai une base db_test. J'ai mon appli sur VS2010. J'ai une erreur lorsque j'essaye d'afficher les données de ma base:
    Le fournisseur n'a pas retourné de chaîne ProviderManifestToken.
    Donc pas de réponse de ma base.

    Pour obtenir ceci, j'ai dans mon Web.Config l'entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      <connectionStrings>
        <add name="MovieDBContext" connectionString="Data Source=|DataDirectory|MusicStore.sdf" providerName="System.Data.SqlServerCe.4.0"/>
      </connectionStrings>
    Puis j'ai ressayé avec une autre connectionString vers ma base de données existante généré via clique droit sur le projet, settings, lienDatabase. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      <add name="MusicStore.Properties.Settings.MovieDBContext" connectionString="Data Source=NITRO\SQLJOHN;Initial Catalog=db_test;Integrated Security=True"
          providerName="System.Data.SqlClient" />
    Voila, voila, si vous pouviez me lancer sur une piste, m'expliquer ce que j'ai mal compris pour que je puisse resoudre ce probleme, ça m'aiderais beaucoup et je pourrais enfin me concentrer sur le codage...je deteste mettre en place les environnements de developpement

  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
    Points : 39 753
    Points
    39 753
    Par défaut
    Normalement ta chaine de connexion Entity Framework devrait ressembler à ça :

    metadata=res://*/MovieDB.csdl|res://*/MovieDB.ssdl|res://*/MovieDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;Initial Catalog=Movie;Integrated Security=True"
    La partie metadata correspond à la définition du modèle :
    - csdl = Conceptual schema definition language
    - ssdl = Store schema definition language
    - msd = Mapping specification language

    Ces 3 fichiers sont générés à la compilation à partir du fichier edmx. En général cette partie de la chaine de connexion n'a pas besoin de changer, en tous cas pas si tu veux seulement changer la BDD utilisée


    La partie provider indique le fournisseur ADO.NET utilisé, qui va être différent selon le type de BDD. Par exemple pour SQL Server (Express ou non), c'est System.Data.SqlClient. Pour SQL Compact 3.5, c'est System.Data.SqlServerCe.3.5. Etc...

    La partie provider connection string est la chaine de connexion "normale" qui permet au provider de se connecter à la base.

    Apparemment aucune des chaines de connexion que tu as essayées ne sont pour Entity Framework, c'est juste des chaines pour des providers ADO.NET "normaux"... Il manque les infos nécessaires à Entity Framework pour créer un ObjectContext

  3. #3
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    Par défaut
    Salut,

    Merci d'avoir répondu si rapidement. D'après ce que j'ai compris, le "Name" doit porter le même nom que la classe qui hérite de DbContext, cette classe sert apparemment à faire le lien avec une base de données. L’attribut Name sert donc au Framework pour générer le fichier edmx(c-a-d les 3 fichiers csdl,ssdl et msd)? Après quoi il génère la base de données à partir de la connectionString : d’une part grace aux métadata pour trouver les 3 fichiers créés juste avant et d’autre part pour savoir où récupérer ces fichiers et d’autre part en utilisant le DATA source pour trouver la base de données cible…donc que signifie le .\SQLEXPRESS ? Il faut que mon instance de base soit à la racine de mon projet ?

    La première chaine de connection que j’ai écrite dans le premier post est celle donnée par l’auteur du tuto sur le site .NET et est donc correcte pour une base SQL Compact Edition seulement et dans le contexte du tuto. J’ai trouvé une erreur avec ma base de données, donc je laisse en stand by ce problème de directives et go réinstaller SQL server . Sinon d’après tes éléments, je partirais sur une chaine qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <add name= « MovieDBContext » connection string= « metadata=|DataDirectory|DBMovie.sdf;provider=System.Data.SqlClient;provider connection string='res://*/MovieDB.csdl|res://*/MovieDB.ssdl|res://*/MovieDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;Initial Catalog=Movie;Integrated Security=True';";" providerName="System.Data.EntityClient" />
    En admettant que les informations nécessaire pour créer l'objet DbContext sont transmises grâce à l'attribut Name...
    Je tests ça dans la journée(je suis en stage à Quebec, d'ou le décalage horaire). Merci pour tes éclaircissements et bonne soirée

  4. #4
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par john85 Voir le message
    Sinon d’après tes éléments, je partirais sur une chaine qui ressemble à ça :
    Oui, si ce n'est que t'es un peu mélangé les pinceaux dans les paramètres...

  5. #5
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    Par défaut Connection String
    Bonjour,
    J'ai passé les 3 derniers jours de taff à reinstaller ma config...oui, j'avais desinstallé mon sql server, oui je voulais le reinstaller, non je ne suis pas SM. Donc me revoila avec mon appli sous visual studio 2010 avec MVC3 de asp.net ma base de données sous SQL server 2008 qui se nomme, très original, SQLEXPRESS. J'ai mis une identification Windows. Et y a pour l'instant que les bases système dedans.

    J'ai un modele "contact.cs" tout simple:
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
     
    namespace MvcApplication1.Models
    {
        public class Contact
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public string Age { get; set; }
        }
     
        public class ContactDbContext : DbContext
        {
            public DbSet<Contact> Contacts {get;set;}
        }
    }
    et j'ai la connection suivante dans mon web config(en reregardant ce que tu m'avais mis, j'en ai fait une plus sérieusement que celle de mon dernier post, j'avais plus sql server donc j'étais plus dedans,bref):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      <connectionStrings>
        <add name="ContactDbContext"
            connectionString="metadata=res://*/Contact.csdl|res://*/Contact.ssdl|res://*/Contact.msl; provider=System.Data.SqlClient;provider connection string=&quot;Data source=.\SQLEXPRESS;Integrated Security=True;&quot;"
       providerName="System.Data.EntityClient" />
        <add name="ApplicationServices"
             connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
             providerName="System.Data.SqlClient" />
      </connectionStrings>
    J'obtient l'erreur dans l'image en pièce jointe

    donc Impossible de charger la ressource dans metadata.
    D'où mon interrogation sur la signification du res: puis des //*/ (option de recherche pour dire dans tout les sous-dossier?). Sinon, si tu vois un autre probleme dans la connection string, cela peut il venir de ma base de données?
    Je viens de trouver la reponse à cette question que je me posais dans la doc:http://msdn.microsoft.com/fr-fr/library/cc716756.aspx. Donc ces fichiers sont embarqués dans mon application,car créé par le entity framework. Ou alors ce dernier ne les créer pas et il faut que je les créer dans App_Data?


    j'ai trouvé un lien susceptible d'aider ceux qui ont le même probleme. Pour ma part, c'est un peu flou... http://blogs.teamb.com/craigstuntz/2010/08/13/38628/


    Bonne soirée
    Images attachées Images attachées  

  6. #6
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    Par défaut Changement d'orientation ?
    Je suis en train de me demander si cela ne serait pas plus simple de creer ma base avec SQL server management studio puis faire un lien de database vers cette derniere. J'ai lu que cela se faisait mais la majorité des tutos utilise le model pour generer la base et non l'inverse.

    Le probleme devient donc(ou est peut-etre le même...) comment faire le lien entre mes classes modeles( qui portent le même nom que mes tables et qui ont les mêmes attributs que ceux de mes tables.) et les tables? Comment dois-je procéder pour connecter ma base (et non un objet database de visuel studio...)et mon appli.

    Sachant que j'ai un lien database qui fonctionne dans visual studio vers cette base. Je perds peut être l'interet du Entity Framework, mais il faudrait que j'arrive à un environnement fonctionnel.

    Bonne soirée.

    PS: Je prefererais bien sur comprendre pourquoi mon lien ne marche pas

  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 : 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
    Points : 39 753
    Points
    39 753
    Par défaut
    Ton modèle de données (.edmx) est dans le même assembly que l'application web? Ou dans un assembly à part ? Il me semble que si c'est dans un autre assembly la syntaxe est un peu différente...

  8. #8
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    Par défaut Edmx?
    Justement, je n'ai pas de modèle .edmx, je pensais que c'était le dbContext qui le créait. Je pense qu'il me manque quelque chose, une étape que j'ai omise. Ou doit se trouver ce fameux .edmx et comment le générer?

    Edit: l'assembly, c'est l'espece de namespace qu'on doit inclure dans les fichier via la declaration de reference using?

  9. #9
    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
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par john85 Voir le message
    Justement, je n'ai pas de modèle .edmx, je pensais que c'était le dbContext qui le créait
    Euh... tu veux dire que depuis le début tu utilises Entity Framework Code First (4.1) ?! Il aurait fallu le préciser, parce que ça change tout... il n'y a pas de fichier edmx avec Code First. Et comme je ne l'ai jamais utilisé, je suis bien incapable de te dire ce qui ne va pas

    Citation Envoyé par john85 Voir le message
    Edit: l'assembly, c'est l'espece de namespace qu'on doit inclure dans les fichier via la declaration de reference using?
    Non, un assembly c'est un exe ou une dll .NET. Chacun des projets de ta solution génère un assembly distinct

  10. #10
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    Par défaut Code first, Model first or Database First
    Voila, comme je l'ai dis,je suis sur MVC3 depuis 1 semaine. Il y a pas mal de notions à appréhender, surtout pour moi qui vient du PHP, il m'a fallut passer un peu de temps sur c# puis parcourir asp.net. Puis MVC3(hierarchie des fichiers mais bon ça va vite) en passant par Razor et je me heurte maintenant à Entity Framework. Tout ça pour dire que je ne pensais pas que Entity Framework était aussi puissant et qu'il existait avant MVC3, j'ai mal evalué sa complexité.
    Pour resumer, moi, tout ce que je veux, c'est me connecter à ma base de données et en exploiter les lignes. Donc d'apres toi, quel moyen sûr et assez bas niveau (je prefererais bien voir ce que je fais, ce qui n'est pas toujours aisé avec une enieme couche d'abstraction) me permettrait de communiquer avec ma base( j'entends dans le entity framework). Je vais m'orienter vers le database first vu que j'ai fait pas mal de BD.
    Ton poste m'a permis de comprendre qu'il y avait (au moins)3 manieres d'utiliser Entity Framework.

    Bonne journée

  11. #11
    Membre du Club
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Points : 58
    Points
    58
    Par défaut Fini
    Bon, ben j'ai reussi...un peu frustrant de voir qu'avec les bons termes(entity framework Code First) google me sort la connection String dans les 5 premiers post. J'ai pourtant essayer de detailler au max la config que j'utilisais, mais c'était pas suffisant. C'est toujours dur de se plonger dans une technologie quand on n'en vois pas les limites.

    Donc pour ceux qui bloques, la connection String que j'ai utilisé est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <connectionStrings>
          <add name="DemandeContext" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;initial catalog=Db_Customs" providerName="System.Data.SqlClient"/>
    Donc je cible juste mon server local SQL EXPRESS 2008 dans laquelle je lui demande de me créer une base Db_Customs.

    Merci d'avoir supporter mes questions durant cette semaine, tom, cela m'aura tout de meme permis de mieux comprendre la couche Entity Framework...peut être qu'un jour je l'aprecierais.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut ASP.net et connexion à une base de donnnée SQL Server
    Bonjour à tous, j'ai besoin de votre aide.

    Donc je dois développer une application avec ASP.NET MVC4.5. Je débute totalement avec ce langage bien que je connaisse le concept MVC. J'ai Visual studio 2013. Maintenant je souhaite passer au développement de mon application qui doit s'appuyer sur un SQL SERVER Management 2012. Et j'ai le même soucis que John85 je souhaite connecter mon application à la base de donnée que je possède sur un serveur distant. J'ai modifié la connectionString mais sans succès. Par contre quand je laisse la connexion par défaut l'application fonctionne correctement.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/04/2015, 09h48
  2. Réponses: 3
    Dernier message: 15/12/2014, 17h39
  3. Connexion avec la base de données asp.net mvc
    Par white_flower dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 16/08/2014, 02h41
  4. [Débutant] ASP.NET MVC 4 fait appel à des web service pour intéragir avec la BDD
    Par asma2881 dans le forum ASP.NET MVC
    Réponses: 3
    Dernier message: 27/03/2013, 21h14
  5. [SQL Server 2008 & ASP.NET] Connexion impossible à la base de données
    Par stringman62 dans le forum Accès aux données
    Réponses: 0
    Dernier message: 22/04/2010, 14h38

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