3 votes

Chaîne de connexion EF 4.1 code premier SQL compact dans une application Windows form

J'ai créé une application Windows form :

  1. Une bibliothèque de présentation avec plusieurs formulaires Windows
  2. Une bibliothèque de classes avec une couche de données
  3. Une bibliothèque de classes pour accéder à une base de données

J'utilise EntityFramework 4.1 avec l'approche Code First et une base de données SQL Compact 4.0.

J'ai créé une chaîne de connexion dans le fichier app.config du projet de bibliothèque de classes utilisé pour se connecter à la base de données. Le problème est que la chaîne de connexion n'a apparemment aucune influence sur la création de la base de données. Je veux dire que tout fonctionne bien avec le programme mais que même si je spécifie un emplacement pour la base de données, cela n'a aucun effet !

Est-ce que j'écris dans le bon app.config ? Dois-je initialiser ma classe DbContext d'une manière spécifique ? (aujourd'hui, je ne passe pas de chaîne de connexion dans le constructeur).

Classe DbContext :

public class MyDB : DbContext
{
    public DbSet<ContactPerson> ContactPersons { get; set; }

    public DbSet<Customer> Customers { get; set; }

    public DbSet<Project> Projects { get; set; }

    public DbSet<Quotation> Quotations { get; set; }

    public MyDB()
    : base("MyDatabase")
    {

    }
}

Chaîne de connexion App.config :

<add name="MyDatabase" connectionString="Data Source=MyDB.sdf" 
providerName="System.Data.SqlServerCE.4.0">

6voto

ErikEJ Points 14368

Vous devez placer le fichier app.config dans le projet d'application (.exe). Le fichier app.config doit ressembler à celui de cet article de blog (sensible à la casse) : http://erikej.blogspot.com/2011/04/saving-images-to-sql-server-compact.html et les noms devraient être MyDB, et non MyDatabase...

0voto

Solmead Points 1685

Votre chaîne de connexion est incorrecte, elle devrait être comme ceci :

add name="MyDB" connectionString="Data Source=MyDB.sdf" providerName="System.Data.SqlServerCE.4.0"

Notez que le nom doit correspondre au nom de votre classe de contexte pour que la connexion soit détectée automatiquement.

0voto

Hannish Points 519

Avez-vous essayé d'ensemencer la BD ? Vous devez injecter des données pour qu'EF crée la base de données. Si vous ne le faites pas, la définition du modèle n'est qu'une déclaration d'intention.

public class ContextInitializer : DropCreateDatabaseIfModelChanges<DBContext>
{
    protected override void Seed(DBContext context)    
    {
        context.Add(new Customers()); //add a Customer, for example
    }
}

Regardez ensuite dans votre dossier Debug/Release et vérifiez si la base de données est créée correctement.

Il y a un article de Microsoft qui explique tout ce processus en détail, ils ont un nouveau tutoriel qui remplace le tutoriel de la "Licorne magique". http://msdn.microsoft.com/en-US/data/jj193542

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X