12 votes

Le code Entity Framework First ne génère pas de base de données

J'ai créé une classe Contexte db et ajouté une chaîne de connexion dans mon fichier web.config, comme indiqué dans le document de Scott Guthrie intitulé Développement "Code First" avec Entity Framework 4 . Je l'exécute à partir d'une méthode de test. J'ai reçu plusieurs erreurs de base de données en exécutant les tests, mais lorsque j'ai finalement nettoyé les classes pour que le test réussisse, je n'avais toujours pas de base de données dans le dossier App_data.

J'ai ajouté Database.CreateIfNotExists() au constructeur de dbContext, mais toujours pas de fichier sdf. Quelqu'un sait-il ce que je fais de mal ?

23voto

LordHits Points 3006

Pour que la base de données soit automatiquement créée, le nom de la chaîne de connexion doit être nommé exactement comme le nom de la sous-classe de DbContext (avec l'espace de nom).

Par exemple, disons que votre classe DB est comme ceci :

namespace MyNamespace
{
    public class FooDb : DbContext
    {    
        public DbSet<XXX> ABC{ get; set; }
    }
}

Votre chaîne de connexion devrait ressembler à ceci :

  <connectionStrings>
    <add name="MyNamespace.FooDb" connectionString="Data Source=|DataDirectory|MyNamespace.FooDb.sdf" providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>

3voto

pharophy Points 153

Vérifiez SQL Server Management Studio -> . \sqlexpress

C'est là que CF a placé toutes mes bases de données lorsque je ne spécifie pas de chaîne de connexion.

2voto

Adam Tolley Points 465

Voir ici pour la création automatique du .sdf avec EF 4.1 et le paquet SQL CE NuGet (ou un nouveau projet MVC 3 apparemment) :

http://www.goatly.net/2011/6/27/entity-framework-code-first-the-path-is-not-valid-check-the-directory-for-the-database.aspx

Pour faire court : Créez un dossier App_Data vide - le sdf est créé automatiquement, mais seulement si le dossier dans lequel il va est présent.

0voto

Grey Wolf Points 328

Assurez-vous que votre dbcontext utilise une chaîne de connexion correcte. Quelque chose de similaire à ceci

public class DBContext : IdentityDbContext<ApplicationUser>
    {
        public DBContext ()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }
}

Et dans web.config

<add name="DefaultConnection" connectionString="Server=....;Connection Timeout=300;" providerName="System.Data.SqlClient" />

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