none
Base en concurrence avec elle-même RRS feed

  • Question

  • Bonjour tout le monde,

    Avec Visual Studio Community 2017, j'utilise SQL Express 2014. Il y a aussi le centre d'installation SQL Express 2018.

    Lorsque j'utilise Entity Framework Code First, sans fournir de chaîne de connexion, la base est créée dans le répertoire de données de l'application, dans l'exemple on va dire App1\AppData.

    Lorsque je crée une deuxième application, toujours avec Entity Framework Code First, qui utilise le même nom de base de données, la base est toujours cherchée au même endroit, à savoir App1\AppData, alors qu'on est dans App2.

    Parfois ça marche, et ça affiche dans App2 les données saisies dans App1.

    D'autres fois ça ne marche pas, et on me dit quelque chose du style :

    Cannot attach the file 'App2\App_Data\PersonneContext.mdf' as database 'PersonneContext'.

    Ben non, il ne peut pas, puisque la base est reconnue dans un autre répertoire, donc on ne peut pas créer un doublon.

    Je soupçonne que ça dépend comment la base a été fermée.

    J'ai essayé de copier la base de App1\AppData vers App2\AppData, mais elle était verrouillée par Sql Express.

    Je mettrais bien une chaîne de connexion pour dire de placer la base dans le serveur SQL Express, car je soupçonne qu'appeler App1 depuis App2 n'est pas forcément une bonne solution, mais ... je rame lamentablement sur quelque chose qui devrait être simple.

    Pour commencer, je ne sais plus trop où, dans un projet WebAPI, je trouve le nom que je dois donner à ma chaîne de connexion.

    Ah oui et une petite précision. J'ai vu quelqu'un dire que sa connexion à la base de données ne fonctionne plus depuis la mise à jour de Windows 10. Je pourrais bien être concerné par ça, puisque je n'ai plus trop touché au développement pendant deux semaines, et que pendant ce temps il y a eu des mises à jour.

    • Modifié Gloops mercredi 6 juin 2018 17:05
    mercredi 6 juin 2018 16:55

Réponses

  • Bonjour,

    ça y est j'ai trouvé.

    Sur un blog d'initiation à MVC (curieusement, pas WebAPI), malheureusement sur une page que je ne retrouve pas, j'ai lu que le nom de la chaîne de connexion doit être le nom de l'objet DbContext.

    public class PersonContext : DbContext
    {
    	public PersonContext() : base("PersonContext")
    	{
    	}
    	public DbSet<API011_Person> API011_Persons { get; set; }
    }
    
    <connectionStrings>
    	<add name="PersonContext"
    			providerName="System.Data.SqlClient"
    			connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DatabaseName;Integrated Security=True;"/>
    </connectionStrings>
    

    Avec cette configuration, les données seront enregistrées dans la base DatabaseName, sur le serveur SQLEXPRESS.

    Il y a ensuite quelques points auxquels faire attention. J'avais une section ConnectionStrings dans mon Web.Config, et j'ai cherché pendant plusieurs heures parce qu'on me disait que cette section devait être déclarée.

    En réalité non, la vérité n'est pas que cette section doit être déclarée, mais que son nom doit commencer par une minuscule : connectionStrings.

    Gare à la tentation de la mettre en tête de Web.Config pour la trouver plus facilement : configSections, si il y en a une, doit obligatoirement être en tête de Web.Config. Mais dans ce cas le message d'erreur est explicite.


    • Marqué comme réponse Gloops samedi 9 juin 2018 09:43
    • Modifié Gloops samedi 9 juin 2018 09:47
    samedi 9 juin 2018 09:42