Compartir a través de


Este artículo proviene de un motor de traducción automática.

Puntos de datos

Estrategias de Demystifying Entity Framework: Flujo de trabajo de creación de modelos

Julie Lerman

Julie LermanComo una tecnología de acceso a datos diseñada para satisfacer las necesidades de una variedad de estilos de desarrollo, Entity Framework de Microsoft ofrece a los desarrolladores con gran cantidad de opciones. Algunas de estas opciones deben realizarse desde el principio en el ciclo de desarrollo y afectará a qué opciones tendrá más a lo largo del proceso de desarrollo. En Mis tres columnas, voy a ofrecer orientación de alto nivel para algunas de las decisiones más importantes que tendrás que hacer con Entity Framework:

  • El código en primer lugar, los flujos de trabajo primero el modelo o el primero de base de datos para crear un modelo conceptual
  • Carga diferida, explícita o diligente
  • Sin formato antiguos objetos de C# (POCOs) o EntityObjects
  • LINQ to Entities o Entity SQL

Hay muchas decisiones de diseño más que hacer en toda la aplicación, pero estas preguntas son más frecuentes y a menudo se debaten: los desarrolladores cuando empiezan a implementar Entity Framework en aplicaciones nuevas o existentes.

Voy a atacar aquí el flujo de trabajo del creación de un modelo conceptual y abarcan los otros tres temas en las dos columnas siguientes. Mi objetivo es proporcionar una descripción general.

Tres opciones para crear un modelo Conceptual

Entity Framework se basa en un modelo conceptual de las entidades de dominio, llamado un Entity Data Model (EDM), y elegir cómo crear ese modelo es la primera decisión que tendrás que hacer. Hay tres flujos de trabajo independientes que puede elegir:

  • El flujo de trabajo de la primera de base de datos comienza con una base de datos heredado y aprovecha a un Asistente para ingeniería inversa a esa base de datos en un modelo conceptual.
  • El modelo primer flujo de trabajo comienza con una pizarra vacía. Utilizar el Diseñador de EDM visual para diseñar un modelo EDM y después generar un esquema de base de datos de dicho modelo.
  • El código primer flujo de trabajo comienza con clases que describen el modelo conceptual. No hay ningún modelo visual que se utiliza con la primera de código.

En primer lugar la base de datos: Iniciar con una base de datos heredados

En la primera iteración de Entity Framework, no tenemos todas las opciones mencionadas. La única forma de crear un modelo fue a ingeniería inversa, una base de datos existente en un EDM, que denominamos modelado de bases de datos de primera (véase figura 1).

With Database First, You Reverse-Engineer a Model from a Legacy Database

Figura 1 con base en primer lugar, le ingeniería inversa un modelo de un legado de base de datos

Probablemente ha visto que esto explica muchas veces, de hecho. Abra al Asistente de EDM, seleccione una base de datos existente, seleccione qué tablas, vistas, procedimientos almacenados y funciones definidas por el usuario que le gustaría se representan en el modelo y haga clic en el botón Finalizar. Al instante, un modelo nazca. El modelo de base de datos primer inicia su vida como un reflejo virtual de la base de datos (o ese subconjunto de la base de datos que ha seleccionado). Con ningún esfuerzo más, los desarrolladores ya se beneficiarán de Entity Framework. Puede escribir consultas con establecimiento inflexible en este modelo y ejecutará las consultas para usted y materializar los objetos con establecimiento inflexible de los resultados de Entity Framework. A continuación, mientras trabaja con los resultados, Entity Framework realiza un seguimiento de los cambios y podrá guardarlos en la base de datos simplemente llamando a su comando de SaveChanges.

Que se va a ser todo lo que necesitan algunos desarrolladores de Entity Framework, aún está más una de las grandes ventajas de tener el modelo, que es el que puede hacer que se parecen más a su dominio, las clases y relaciones que definen la aplicación, que la base de datosy, a continuación, no se tendrá que preocuparse acerca de cómo obtener desde allí atrás a la base de datos (que se seguirá para encargarse de Entity Framework). Personalización de modelo es una característica fundamental de EDM que muchos desarrolladores pase por alto y no se benefician de. Puede introducir las jerarquías de herencia en el modelo, cambiar la forma de entidades, combinar y dividir entidades y mucho más.

Con el primero de base de datos, puede tener lo mejor de ambos de estos mundos: aproveche la base de datos existente para obtener un enorme avance con la creación del modelo, a continuación, personalizar ese modelo para reflejar mejor el dominio de aplicación.

Primero Model: Empezar con un modelo Visual

Siempre no tendrá para empezar con una base de datos heredado. Modelo en primer lugar le permite diseñar el modelo directamente en el diseñador y cree el esquema de base de datos basado en el modelo. Puede generar las entidades y sus propiedades, definir las relaciones y restricciones y crear el derecho de las jerarquías de herencia en el diseñador. Puede especificar qué propiedades se convertirá en claves de identidad e incluso si la base de datos debe ser responsable de generar sus valores (véase figura 2).

With Model First, You Design a Model that’s Used to Generate Database Schema

Figura 2 con modelo en primer lugar, a que diseño de un modelo que se utiliza para generar el esquema de base de datos

El Diseñador de EDM función "Crear base de datos de modelo de" realmente no crea una base de datos. Lo que hará es generar SQL que, cuando se ejecuta, se definen el esquema de una base de datos. Este SQL se conoce como lenguaje de definición de datos o archivo DDL.

Hay algunas cosas no obvias para tener en cuenta. Modelo en primer lugar se introdujo en 2010 de Visual Studio y Microsoft.NET Framework 4. No encontrará la opción de crear la base de datos en Visual Studio 2008. Asimismo, porque es una característica nueva, deberá asegurarse de que el proveedor de ADO.NET de SQL que está utilizando (por ejemplo, System.Data.Sql) se ha actualizado para proporcionar esta capacidad. El proveedor de Microsoft SQL Server se ha actualizado para el.Versión de NET (4); También se actualizaron algunos de los proveedores de terceros.

Estar preparado para un comportamiento es que la primera de modelo no, de forma predeterminada, realiza las actualizaciones del esquema incremental la base de datos. Cuando se ejecuta la función, creará una secuencia de comandos DDL completamente nueva que va a quitar y, a continuación, volver a crear todos los objetos de base de datos. Herramientas externas están disponibles para ayudar a que se modifique el esquema de base de datos en lugar de sobrescribirlo. De lo contrario, desea copiar los datos previamente o escribir una secuencia de comandos para regenerar los datos de prueba en cualquier momento que desea modificar el modelo y volver a crear el esquema de base de datos.

Visual Studio proporciona un punto de extensibilidad en la generación de la base de datos, que puede aprovechar con la Ayuda de la entidad Diseñador de base de datos de generación Power Pack de Microsoft. Se puede descargar desde Visual Studio 2010 Extension Manager o desde visualstudiogallery.com. Esta extensión no sólo proporciona un medio para realizar una incremental cambia a la base de datos con el modelo de primera, pero también le permite cambiar la asignación de herencia de tabla por jerarquía predeterminada e incluso crear sus propias reglas de generación personalizadas de DDL.

En primer lugar de código: Iniciar con el código y renunciar a un modelo físico

Con la base de datos de primera modelo primera, terminará con una representación física de su EDM junto con metadatos adicionales. El formato raw de este modelo es XML. Se almacena en un archivo con la extensión EDMX y puede trabajar con él en el Diseñador de EDM o el XML sin formato. En tiempo de ejecución, las lecturas de Entity Framework ese código XML y crea una representación en memoria del modelo mediante clases especializadas que representan los metadatos, las entidades, relaciones y así sucesivamente. El tiempo de ejecución de Entity Framework funciona con esos objetos, no en el archivo XML real. Estos metadatos son especialmente importante cuando necesita Entity Framework para transformar las consultas de modelo en las consultas de base de datos, los resultados de la base de datos en instancias de entidad y crear comandos de base de datos para inserciones, actualizaciones y eliminaciones. Visual Studio generará las clases de dominio desde el código XML para utilizar en la aplicación.

El equipo de Entity Framework nos presenta una manera de crear los objetos necesarios de metadatos en tiempo de ejecución sin necesidad de disponer de un archivo físico de EDMX. Se trata de la potencia detrás del flujo de trabajo de creación de modelos tercer para Entity Framework, llamado primer de código. Con código en primer lugar, en vez de crear un modelo EDM, se crean las clases de dominio como lo haría para cualquier otro.NET Framework. En tiempo de ejecución, Entity Framework analizará dichas clases y, mediante un conjunto de convenciones predeterminadas, crear un modelo en memoria que puede trabajar el tiempo de ejecución de Entity Framework. Debido a que las clases siempre naturalmente no proporcionar la información que necesita el Entity Framework para crear ese modelo, puede proporcionar una configuración adicional (mediante atributos declarativos y datos anotaciones o en el código mediante una API fluent) para describir el modelo, reemplazar las convenciones mencionadas anteriormente. Puede utilizar la configuración para una amplia variedad de tareas de modelo, desde la identificación de las claves principales que no coinciden con las convenciones de código primera relaciones de ajuste o incluso especificar cómo se debe representar una jerarquía de herencia.

Al igual que el primero, modelo de código primera la presunción de que no están empezando en una base de datos heredado de forma predeterminada y proporciona la capacidad para crear esa base de datos desde el modelo inferido. A diferencia de la primera de modelo, puede crear el archivo de base de datos, así como el esquema. Con el primero de código, aún carecen de una manera de conservar la base de datos si modifica el modelo y volver a generar la base de datos. Sin embargo, la primera de código tiene soporte para detectar las diferencias del modelo y la base de datos, así como para inicializar la base de datos con datos utilizando a los inicializadores de base de datos.

También puede utilizar código primero con una base de datos existente. Si no coinciden con los nombres de clase y la propiedad la base de datos, puede agregar anotaciones de datos o la configuración a través de la API fluent superar. Figura 3 muestra una clase con atributos que obligará a primera de código para proporcionar las asignaciones a los nombres de tabla y propiedad correctas aunque la clase y los campos no coinciden exactamente.

Figura 3 una clase con atributos primeras código para la clase puede asignar correctamente a una tabla existente

[Table("SalesOrderDetail", SchemaName="SalesLT")]
  public partial class Detail
  {
    // Scalar properties

    [Column(Name = "SalesOrderID")]
    public int OrderId { get; set; }
    [Column(Name = "SalesOrderDetailID")]
    public int DetailId { get; set; }
    public short OrderQty { get; set; }
    public int ProductId { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal UnitPriceDiscount { get; set; }

    public decimal LineTotal { get; set; }
    public System.DateTime ModifiedDate { get; set; }

    // Navigation properties

    public virtual Product Product { get; set; }
    public virtual Order Order { get; set; }
  }

Un árbol de decisión

Entity Framework ha evolucionado para soportar una variedad de estilos de desarrollo, pero esta fuerza que ahora nos estar familiarizado con las opciones para elegir el enfoque correcto.Si lo desea para utilizar una interfaz de usuario para el modelo, a continuación, tiene el Diseñador de EDM disponibles ya sea a partir de una base de datos existente o mediante la opción modelo primero.Incluso entonces, se puede utilizar al modelador para ayudar a hacer la responsabilidad en el suelo y, a continuación, utilizar una plantilla para crear clases de código primero y colocar el modelo visual.Si eres todo sobre el código y prefieren no estar ligada a un archivo EDMX o el Modelador visual, primer código atraerá a usted (véase figura 4).

The Decision Tree

Figura 4 el árbol de decisión

Iniciar en la ruta de acceso de derecho

Cualquier técnica de modelado que se elija: la primera de base de datos, primero el modelo o el primero de código: una vez que haya creado un modelo, no observará diferencia alguna cuando comience a consultar, interactúan y conservar con el tiempo de ejecución de Entity Framework por medio de las clases del modelo de entidades.Y es posible comenzar con un flujo de trabajo y cambiar a otro.Puede crear clases de código primero desde un EDMX utilizando la plantilla de la generación de código DbContext.Y mientras lo que no es tan fácil, también puede crear un EDMX de las clases de código primero.

He proporcionado una visión general de las opciones y lo que pueden impulsar a elegir una sobre la otra y espero que he Desmitificación algunas de las opciones para usted.

En el futuro las columnas, hablaré sobre otras decisiones grandes que encontrará en las aplicaciones de Entity Framework, que he mencionado al principio de esta columna: elección de una estrategia de generación de código para EntityObjects o POCOs, cargando relacionadas con datos mediante carga diligente, diferida o explícitay escribir consultas mediante LINQ to Entities o Entity SQL.

Julie Lerman* es MVP de Microsoft, profesora de .NET y consultora que vive en las colinas de Vermont. Puede encontrar su presentación sobre acceso a datos y otros temas de Microsoft .NET en grupos de usuarios y conferencias en todo el mundo. Blogs de ella en thedatafarm.com/blog y es el autor del aclamado libro, "Programación Entity Framework" (o ' Reilly Media, 2010). Seguirla en Twitter en twitter.com/julielerman.*

Gracias al siguiente experto técnico para el examen de este artículo: Tim Laverty