2011-03-05 15 views
27

Estoy desarrollando una aplicación con Entity Framework 4 y SQL Compact 4, utilizando un enfoque Model First. He creado mi EDM y ahora quiero generar una base de datos SQL Compact 4.0 para que funcione como un almacén de datos para el modelo. Hago aparecer el Generate Database Wizard y hago clic en el botón New Connection para crear una conexión para el archivo generado. El Elegir origen de datos aparece de diálogo, pero SQL compacto 4.0 no aparece en la lista de fuentes de datos disponibles:Entity Framework 4 y SQL Compact 4: ¿Cómo generar una base de datos?

enter image description here

Me postulo VS 2010 SP1 (beta) y he instalado las herramientas VS 2010 para SQL Compact 4.0. Puedo crear una conexión de datos SQL Compact 4.0 desde Server Explorer. Sólo en el Generar asistente de base de datos no aparece la opción 4.0. Por cierto, mi instalación de SQL Compact 4.0 incluye System.Data.SqlServerCe.Entity.dll. Entonces debería tener los componentes SQL Compact que necesito.

¿Estoy haciendo algo incorrectamente, o es esto un error? ¿Alguien tiene una solución o una solución alternativa? Gracias por tu ayuda.

+0

David, ¿ha mirado usar SQLite en lugar de CE? He encontrado que SQLite es más fácil de usar y totalmente compatible con EF4. –

Respuesta

34

Como solución, estoy usando el Asistente para generar la base de datos para generar una secuencia de comandos SQL de un 3,5 compacto, que estoy corriendo contra una base de datos SQL en blanco compacto 4.0 creada en el Explorador de soluciones VS 2010. Estos son los pasos para llevar a cabo esa tarea:

Paso 1: Ejecutar el Asistente para generar la base de datos .Solicita la creación de un archivo en su primera página, por lo que debe crear un archivo SQL Compact 3.5. Este archivo es ficticio, por lo que no importa cómo lo nombre.

Paso 2: Complete el asistente para crear el script DDL que configurará la nueva base de datos.

Paso 3: eliminar el archivo ficticio creado en el paso 1.

Paso 4: Uso de VS 2010 Explorador de servidores para crear el archivo real de SQL 4.0 compacto que va a utilizar en el proyecto.

Paso 5: El Asistente para bases de lugares dos referencias a SQL compacto "3.5" en el archivo EDMX Generar; estas referencias deben cambiarse a "4.0". Abra el archivo EDMX en el Editor XML de VS 2010 (haga clic con el botón derecho y seleccione 'Abrir con' para acceder al Editor XML). La línea 7 debe contener las referencias "3.5". Cambie estos a "4.0" y guarde el archivo.

Paso 6: Abra el archivo de script generado EDMX.SQLCE en VS 2010. VS indicará (mediante un banner en el panel de trabajo) que el script está desconectado. Haga clic derecho en el espacio en blanco sobre el banner y seleccione Conexión> Conectar en el menú contextual que aparece. Eso nos lleva a un diálogo de conexión - se usa para conectar el guión a la base de datos SQL 4.0 compacto que creó en el Paso 4.

Paso 7: Haga clic derecho en el guión de espacio en blanco de nuevo y seleccione Ejecutar SQL desde el menú contextual. El script se ejecutará y obtendrá el mensaje de resultados habitual en un panel debajo del script. Suponiendo una ejecución exitosa, la base de datos luego se configura para que coincida con el modelo de datos de la entidad.

Paso 8: También debemos asegurarnos de que App.config/web.config no esté apuntando al archivo ficticio. Si se cambia al archivo actual de CE 4.0 creado en el Paso 4 anterior. De lo contrario, tenemos problemas con la regeneración del script cuando hacemos cambios en el modelo. En el archivo de configuración, cambie 3.5 a 4.0 también.

En ese momento, debe poder utilizar Entity Framework 4 para trabajar con su base de datos.

1

Según tengo entendido, la versión actual de VS 2010 no tiene soporte para SQL CE 4.0. Debe incluirse en VS 2010 SP1 (actualmente en Beta). Compruebe this blog post que también describe el uso de EF Model con SQL CE 4.0 en SP1.

Editar:

Me encontraron esta workaround.

+1

Gracias, pero tengo SP1 y VS Tools instaladas. La publicación del blog en realidad no aborda mi problema: está orientada a db-first y código primero, y estoy haciendo primero el modelo. –

+0

Encontré algunas soluciones cuando busco otra cosa. Agregué un enlace a mi respuesta. –

2

Para responder a los comentarios de abajo y dirigirse a ellos en función de: http://blogs.msdn.com/b/sqlservercompact/archive/2011/01/12/microsoft-sql-server-compact-4-0-is-available-for-download.aspx

Estos asistentes a no funcionan.

Diseñadores en los proyectos de Windows VB o C# en Visual Studio 2010 SP1 Beta: los siguientes asistentes no funcionan con Compact 4.0 en el sistema de proyectos de Windows. Los desarrolladores pueden añadir manualmente referencia al proveedor de ADO.NET para Compact 4.0 (System.Data.SqlServerCe) para desarrollar programas para Compact 4.0 en los proyectos de Windows:

  1. El Asistente para la configuración de orígenes de datos que se utiliza para configurar los conjuntos de datos.
  2. El asistente de configuración de configuración de datos que se usa para configurar la sincronización de datos y el esquema con SQL Server utilizando Sync FX.
  3. El asistente Entity Data Model que se utiliza para generar entidades desde una base de datos Compact.

Aquí están las alternativas aceptadas para estos problemas. http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

+0

Gracias, pero mi problema es con Entity Framework 4. EF4 tiene un * Generate Database Wizard * que generará un script T-SQL para una base de datos SQL Compact a partir de un modelo de datos de entidad. Es el * Asistente de Generar Base de Datos * que no muestra SQL Compact 4 como una opción de generación. –

+0

Si va por una sintaxis CE de script de db Transact SQL no es diferente de SQLServer. Deberías abel simplemente generar las tablas y tal con esa secuencia de comandos. Veo lo que dices. ¿Has intentado agregar una conexión con el explorador del servidor? ¿Y ver si surgirá después de establecer la conexión? Desearía poder ser de más ayuda. – Dimentox

+0

+1: Agradezco tu ayuda. –

0

puedo correr Asistente para generar la base de datos sin ningún problema desde mi proyecto Chinook.Data, asegúrese de que tiene una cadena de conexión adecuada en su app.config. http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
    <add name="ChinookEntities" connectionString="metadata=res://*/ChinookModel.csdl|res://*/ChinookModel.ssdl|res://*/ChinookModel.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=C:\projects\Chinook\Chinook40.sdf&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration> 
+0

Gracias, Erik: cuando ejecuta el Asistente Generar Base de Datos, ¿tiene una entrada para SQL Compact 4.0? El mago corre por mí, pero no muestra Ver. 4.0 como una opción. –

+0

Acabo de obtener la segunda pantalla con el DDL generado, pero no muestra las conexiones 4.0 en el paso 1, eso es cierto. Deberá mover el edmx a un proyecto web para ver las conexiones 4.0 en el paso 1 – ErikEJ

+0

Desarrollé una solución alternativa que permite crear una base de datos SQL Compact 4.0 a partir de un EDM de Entity Framework 4, sin tener que usar un proyecto web. Ver la respuesta aceptada a esta pregunta. –

1

Puede utilizar IDatabaseInitializer y crear la base de datos de código usando

if (File.Exists("Test.sdf")) 
    File.Delete("Test.sdf"); 

string connStr = "Data Source = Test.sdf; Password = <password>"; 

SqlCeEngine engine = new SqlCeEngine(connStr); 
engine.CreateDatabase(); 
engine.Dispose(); 

SqlCeConnection conn = null; 

try { 
    conn = new SqlCeConnection(connStr); 
    conn.Open(); 

    SqlCeCommand cmd = conn.CreateCommand(); 
    cmd.CommandText = "CREATE TABLE myTable (col1 int, col2 ntext)"; 
    cmd.ExecuteNonQuery(); 

catch { 
finally { 
    conn.Close(); 

http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceengine(v=vs.80).aspx

0

necesitan Probablemente el SQL Server Compact 4 tools instalado, así, si no se ha instalado directamente cuando Visual Studio 2010 SP1 fue instalado, puedes instalarlo Esto es lo que funcionó para mí cuando tuve el problema.

Cuestiones relacionadas