13

J'ai défini un ensemble de classes dans le style des conventions Entity Framework Code-First et annoté les propriétés de classe avec les attributs System.ComponentModel.DataAnnotations.Génération de la base de données SQL CE à partir de la classe EF Code-First DbContext

Maintenant, je veux générer une base de données SQL Server Compact Edition (SCSE) (4.0) à partir de ce code.

De quel code avez-vous besoin pour faire cela et quels assemblages doivent être importés? Jusqu'à présent, j'ai importé le C: \ Program Files (x86) \ Microsoft SQL Server édition compacte \ v4.0 \ Desktop {System.Data.SqlServerCe.dll, System.Data.SqlServerCe.Entity \ System. Data.SqlServerCe.Entity.dll} fichiers dll.

N'importe quel pointeur apprécié. Articles et autres joyeusetés.

Répondre

15

J'ai trouvé la solution. La chose essentielle est cette ligne de code:

DbDatabase.DefaultConnectionFactory = new 
         SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"); 

Voici un échantillon complet:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Proto 
{ 
    using System.Data; 
    using System.Data.Entity; 
    using System.Data.Entity.Database; 
    using System.Data.SqlServerCe; 
    using System.ComponentModel.DataAnnotations; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      DbDatabase.DefaultConnectionFactory = new 
         SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"); 
      DbDatabase.SetInitializer(
         new DropCreateDatabaseIfModelChanges<ProtoCatalog>() 
       ); 

      using (var db = new ProtoCatalog()) 
      { 
       var user = new User 
       { 
        Name = "bob", 
        Password = "123", 
        Creation = DateTime.Now, 
        PrimaryEmailAddress = "[email protected]" 
       }; 

       db.Users.Add(user); 

       db.SaveChanges(); 

       Console.ReadKey(); 
      } 
     } 
    } 

    public class ProtoCatalog : DbContext 
    { 
     public DbSet<User> Users { get; set; } 
    } 

    public class User 
    { 
     [Key, StringLength(50)] 
     public string Name { get; set; } 

     [Required, StringLength(100)] 
     public string Password { get; set; } 

     [Required, StringLength(320)] 
     public string PrimaryEmailAddress { get; set; } 

     [StringLength(320)] 
     public string SecondaryEmailAddress { get; set; } 

     [Required] 
     public DateTime Creation { get; set; } 

     public bool Active { get; set; } 
    } 
} 

L'API va probablement changer entre EF code-première CTP 5 et RTM cependant, mais c'est comment faire à présent.

J'ai fait un petit blog post à ce sujet.

2

La meilleure façon que j'ai trouvé installer NuGet et jouer avec les EF CodeFirst et SQL CE 4 paquets, il y a aussi un échantillon que vous pouvez installer à partir de NuGet qui a des exemples de code pour toutes les stratégies de création db. Vous feriez quelque chose comme:

install-package EFCodeFirst.SqlServerCompact 
install-package EFCodeFirst.Sample 

Dans la racine de votre répertoire de projet devrait être un fichier appelé « AppStart_SQLCEEntityFramework.cs » font référence à ce que des exemples.

+0

Merci! Je viens d'avoir Visual C# Express installé à la maison, mais cela peut changer. –

2

Une autre façon de fournir le DefaultConnectionProvider consiste à l'ajouter dans app.config.

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> 
    <parameters> 
     <parameter value="System.Data.SqlServerCe.4.0" /> 
    </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 
Questions connexes