13

Definí un conjunto de clases en el estilo de Entity Framework Code-First y anoté las propiedades de clase con los atributos System.ComponentModel.DataAnnotations.Generar base de datos SQL CE a partir del código EF-Primera clase DbContext

Ahora quiero generar una base de datos de SQL Server Compact Edition (SCSE) (4.0) a partir de este código.

¿Qué código se necesita para hacer esto y qué ensambles deben importarse?

Hasta ahora he importado el C: \ Archivos de programa (x86) \ Microsoft SQL Server Compact Edition \ v4.0 \ Desktop {System.Data.SqlServerCe.dll, System.Data.SqlServerCe.Entity \ System. Data.SqlServerCe.Entity.dll} archivos dll.

Cualquier puntero apreciado. Artículos y otras cosas.

Respuesta

15

Encontré la solución. Lo fundamental es esta línea de código:

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

He aquí una muestra completa:

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; } 
    } 
} 

La API es probable que cambie entre EF Código-Primera CTP 5 y RTM sin embargo, pero esto es cómo se hace ahora.

He hecho un pequeño blog post al respecto.

2

La mejor manera que encontré fue la instalación de NuGet y jugar con los EF CodeFirst y SQL CE 4 paquetes, también hay una muestra que puede instalar desde NuGet que tiene ejemplos de código para todas las estrategias de creación de db. Se podría hacer algo como:

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

En la raíz de su directorio del proyecto debe ser un archivo llamado "AppStart_SQLCEEntityFramework.cs" se refieren a la de los ejemplos.

+0

¡Gracias! Solo tengo instalado Visual C# Express en casa, pero eso puede cambiar. –

2

Otra forma de proporcionar DefaultConnectionProvider es agregándolo en app.config.

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