Compartir a través de


Entity Framework (SQL Server Compact)

Entity Framework es un conjunto de tecnologías de ADO.NET que admite el desarrollo de aplicaciones de software orientadas a datos. Entity Framework permite a los desarrolladores trabajar con datos en forma de objetos y propiedades específicos del dominio, como clientes y direcciones de cliente, sin tener que preocuparse de las tablas y las columnas de las bases de datos subyacentes donde se almacenan dichos datos.

Al posibilitar que los desarrolladores trabajen con los datos en un nivel de abstracción mayor, Entity Framework admite código que es independiente de cualquier motor de almacenamiento de datos o esquema relacional determinados. Los desarrolladores pueden crear las aplicaciones de acceso a datos programando con un modelo de aplicación conceptual en lugar de programar directamente con un esquema de almacenamiento relacional.

Las aplicaciones y servicios de Entity Framework están compuestos de un modelo conceptual, un modelo de almacenamiento y una asignación entre los dos. Para satisfacer las necesidades de los desarrolladores que desean derivar un Entity Data Model (EDM) a partir de una base de datos existente, Entity Framework proporciona un conjunto de herramientas que generan y validan un EDM y crean las clases programables según el modelo conceptual.

A través del EDM, ADO.NET expone las entidades como objetos en el entorno .NET. Esto convierte al nivel de objetos en un destino ideal para usar Language-Integrated Query (LINQ). LINQ to Entities permite a los desarrolladores crear consultas flexibles, con establecimiento inflexible de tipos, en el contexto de objetos de Entity Framework utilizando directamente las expresiones y los operadores de consulta estándar de LINQ desde el entorno de desarrollo. Para obtener más información sobre Entity Framework y LINQ to Entities, vea la documentación de Entity Framework.

SQL Server Compact proporciona compatibilidad con Entity Framework para la plataforma Aplicación web a partir de SQL Server Compact 4.0.

Entity Framework en SQL Server Compact

Para utilizar Entity Framework con SQL Server Compact 4.0, instale primero Entity Framework. Entity Framework es un componente de .NET Framework 4.

La compatibilidad de desarrollo para SQL Server Compact 4.0 la proporciona Visual Studio 2010 Service Pack 1. La compatibilidad de Entity Data Model Designer con Entity Framework en Visual Studio 2010 Service Pack 1 se proporciona con las herramientas de Entity Framework. Tenga en cuenta que Entity Data Model Designer (Entity Designer) es un componente de Visual Studio desde Visual Studio 2008 Service Pack 1 (SP1). Es una herramienta visual que se usa para crear y modificar un Entity Data Model (EDM). Para obtener más información acerca de esta herramienta, vea la documentación de Entity Framework.

En la versión SQL Server Compact 4.0, SQL Server Compact proporciona un ensamblado administrado: System.Data.SQLServerCe.Entity.dll. El proveedor de datos administrados de ADO.NET System.Data.SqlServerCE.dll usa internamente el ensamblado System.Data.SQLServerCe.Entity.dll y admite el acceso a datos que se describe en un Entity Data Model (EDM).

Al instalar SQL Server Compact 4.0 o versiones posteriores de SQL Server Compact (SSCERuntime-ENU.msi), la System.Data.SQLServerCe.Entity.dll se instala en la carpeta %ProgramFiles%\Microsoft SQL Server Compact Edition\v4.0.

Nota

Puede usar SQL Server Compact 4.0 solo con Entity Framework 4 en .NET Framework versión 4. SQL Server Compact 4.0 no admite .NET Framework 3.5 y genera un error.

Code First o Code Only

SQL Server Compact 4.0 admite el modelo de programación Code First de ADO.NET Entity Framework 4. Hay dos formas de crear aplicaciones web Entity Framework: Database First y Model First. Model First es una nueva característica de ADO.NET Entity Framework 4 (.NET Framework 4) que permite un flujo de trabajo de desarrollo centrado en el código que se conoce como desarrollo Code First o Code Only. En este flujo de trabajo, el CÓDIGO es el modelo. El modelo de programación Code First funciona de la siguiente forma:

  • Para usar el modelo Code Only debe crear algunas clases POCO (Plain Old CLR Object). Están compuestas principalmente de constructores.

  • El paso siguiente es escribir una clase que derive de ObjectContext para describir la forma del modelo y el modo en que desea que acceda a las clases POCO. Esta es una clase que tiene en cuenta Entity Framework.

En esta etapa, tendrá todo lo relativo a CLR pero la clase ObjectContext no se puede usar sin los metadatos Entity Framework, que se almacenan en el archivo EDMX. En el modelo Code Only no hay un archivo EDMX.

  • Para usar los metadatos, tiene que definir ContextBuilder, donde define sus búsquedas SqlConnection. ContextBuilder a través de las propiedades de ObjectContext e infiere un modelo conceptual, un modelo de almacenamiento y una asignación por convención. Después, usa los metadatos y la SqlConnection que pasó a través de ContextBuilder para crear una EntityConnection.

  • A continuación, se crea una instancia de ObjectContext pasando la EntityConnection al constructor, que se crea en las clases POCO.

  • Una vez que creada la instancia del contexto, puede usar muchos métodos de ampliación a fin de:

    1. Crear automáticamente un script de base de datos

    2. Comprobar si existe la base de datos

    3. Crear una base de datos

    4. Quitar una base de datos, etc.

En lugar de usar convenciones, también puede invalidarlas. En Entity Framework 4, el ContextBuilder se refactoriza en ModelBuilder y DbModel.

Para descargarlo, vaya a ADO.NET Entity Framework 4.

Limitaciones de SQL Server Compact

Las siguientes son algunas limitaciones de SQL Server Compact cuando se utiliza con Entity Framework:

  • SQL Server Compact 4.0 admite las entidades con claves o valores generados por el servidor cuando se utiliza con Entity Framework, solo si el tipo de clave es Columnas de identidad.

    Al utilizar Entity Framework, las claves de una entidad se pueden marcar como si las hubiera generado el servidor. Esto permite a la base de datos generar un valor para la clave en la inserción o creación de la entidad. Además, como valores generados por el servidor pueden marcarse ninguna o varias propiedades de una entidad. Para obtener más información, vea el tema sobre el patrón generado en almacén de la documentación de Entity Framework.

    Entity Framework permite definir los tipos de entidades con valores o claves generados por el servidor. La operación de manipulación de datos en una entidad que tiene valores generados distintos del tipo Identity inicia una excepción "No admitido".

  • La generación de Entity Data Model para SQL Server Compact 4.0 no será correcta si hay nombres de restricción duplicados en el esquema de SQL Server Compact.

    En SQL Server Compact, los nombres de restricción son únicos dentro de una tabla y esto puede favorecer la duplicación de nombres de restricción en la base de datos. El comportamiento es diferente de SQL Server, donde los nombres de restricción son únicos en toda la base de datos. Si un esquema de SQL Server Compact 4.0 tiene nombres de restricción (relación clave principal – clave externa), se producirá un error al generar Entity Data Model con el Asistente para Entity Data Model de ADO.NET Entity Framework. Siempre debe mantener el nombre de restricción único en toda la base de datos, por ejemplo agregando el nombre de la tabla al nombre de restricción.

  • SQL Server Compact no admite las combinaciones externas completas que utilizan Entity Framework, aunque Entity SQL sí las admite. Por ejemplo, la consulta siguiente no se admite:

    Entity SQL:

    SELECT c.Name, c.Id, o.Id 
    FROM NW.Customers AS c 
    FULL OUTER JOIN NW.Orders AS o ON c.Id = o.CustomerId
    

    Observe que SQL Server Compact admite las combinaciones internas, las combinaciones externas izquierdas y las combinaciones externas derechas que utilizan Entity Framework.

  • SQL Server Compact no admite las subcláusulas COLLATE en la cláusula ORDER BY de una consulta de Entity SQL.

    Entity SQL permite especificar una subcláusula COLLATE como parte de cada clave en una cláusula ORDER BY. La subcláusula COLLATE solo es aplicable para las expresiones con valor de cadena y determina la semántica de comparación que se utilizará para esa expresión.

    SQL Server Compact, cuando se utiliza con Entity Framework, no admite el uso de una subcláusula COLLATE en la cláusula ORDER BY de una consulta de Entity SQL. Por ejemplo, la consulta siguiente no se admite:

    Entity SQL:

    SELECT value c 
    FROM NW.Customers AS c 
    ORDER BY c.Name COLLATE Traditional_Spanish_ci_ai 
    
  • A diferencia de SQL Server, SQL Server Compact no admite las operaciones de módulo (denotadas mediante %) en los tipos de datos real, float, money y numeric.

    En SQL Server Compact, las consultas siguientes ocasionan un mensaje de error:

    Entity SQL:

    ( CAST ( 1 AS Edm.Int16) % CAST ( 1 AS Edm.Decimal) ) 
    

    Transact-SQL:

    SELECT cast (1 as smallint) %cast (1 as decimal(28,4)) 
    

    Al ejecutar este tipo de consulta, se mostrará un mensaje de error similar al siguiente: "El módulo no se admite en los tipos de datos numéricos, Real, Float y Money. [ Tipo de datos = numérico ]"

  • SQL Server Compact no admite DISTINCT en los agregados (max, min, sum, count).

    Si intenta escribir consultas de Entity SQL y Transact-SQL que usen DISTINCT en los agregados (max, min, sum, count), se iniciará una excepción "No se admite". En el ejemplo siguiente se muestra una consulta de Entity SQL que utiliza DISTINCT en el agregado count.

    Entity SQL:

    SELECT count(distinct [TaskId]) FROM ArubaContainer.TaskSet AS [Task]
    
  • SQL Server Compact no admite tiempos de espera de comandos cuando se utiliza con Entity Framework.

    Entity Framework habilita los tiempos de espera para los comandos que se van a especificar utilizando las propiedades ObjectContext.QueryTimeout o EntityCommand.CommandTimeout.

    SQL Server Compact no admite tiempos de espera cuando se utiliza con Entity Framework. En otras palabras, el tiempo de espera de comandos no se debe establecer en un valor distinto de cero. Si se establece una propiedad de tiempo de espera de conexión, la base de datos SQL Server Compact inicia una excepción NotSupportedException(“CommandTimeout”).

  • SQL Server Compact solo admite las cadenas Unicode.

    Entity Framework proporciona compatibilidad tanto con las cadenas Unicode como con las cadenas no Unicode. SQL Server Compact solo admite las cadenas Unicode. El proveedor actual no admite el literal <literal> de tipo 'String'. SQL Server Compact inicia la excepción "cerca de un literal constante" en las cadenas no Unicode.

  • SQL Server Compact no admite las vistas ni los procedimientos almacenados.

Ejemplo

Para obtener información sobre cómo crear aplicaciones de Entity Framework que utilizan la base de datos de SQL Server Compact como un origen de datos, vea Crear una aplicación de Entity Framework (SQL Server Compact).

Vea también

Otros recursos

Generar aplicaciones administradas (SQL Server Compact)