Database First

Este vídeo y el tutorial paso a paso proporcionan una introducción al desarrollo de Database First mediante Entity Framework. Database First le permite aplicar ingeniería inversa a un modelo a partir de una base de datos existente. El modelo se almacena en un archivo EDMX (extensión .edmx) y se puede ver y editar en Entity Framework Designer. Las clases con las que interactúa en la aplicación se generan automáticamente a partir del archivo EDMX.

Ver el vídeo

Este vídeo ofrece una introducción al desarrollo de Database First usando Entity Framework. Database First le permite aplicar ingeniería inversa a un modelo a partir de una base de datos existente. El modelo se almacena en un archivo EDMX (extensión .edmx) y se puede ver y editar en Entity Framework Designer. Las clases con las que interactúa en la aplicación se generan automáticamente a partir del archivo EDMX.

Presentado por: Rowan Miller

Vídeo: WMV | MP4 | WMV (ZIP)

Requisitos previos

Es necesario tener instalado al menos Visual Studio 2010 o Visual Studio 2012 para completar este tutorial.

Si se usa Visual Studio 2010, también se debe tener Instalado NuGet.

 

1. Creación de una base de datos existente

Normalmente, cuando el destino es una base de datos existente, ya estará creada, pero para este tutorial necesitamos crear una base de datos a la que acceder.

El servidor de base de datos instalado con Visual Studio es diferente en función de la versión de Visual Studio que haya instalado:

  • Si usa Visual Studio 2010, va a crear una base de datos SQL Express.
  • Si usa Visual Studio 2012, creará una base de datos LocalDB.

 

Vamos a continuar y generar la base de datos.

  • Abra Visual Studio.

  • Vista -> Explorador de servidores

  • Haga clic con el botón derecho en Conexiones de datos -> Agregar conexión...

  • Si no se ha conectado antes a una base de datos desde el Explorador de servidores, deberá seleccionar Microsoft SQL Server como origen de los datos.

    Select Data Source

  • Conéctese a LocalDB o SQL Express, en función de cuál haya instalado y escriba DatabaseFirst.Blogging como nombre de base de datos.

    Sql Express Connection DF

    LocalDB Connection DF

  • Seleccione Aceptar y se le preguntará si desea crear una nueva base de datos, seleccione .

    Create Database Dialog

  • La nueva base de datos aparecerá ahora en el Explorador de servidores, haga clic con el botón derecho en ella y seleccione Nueva consulta.

  • Copie el siguiente SQL en la nueva consulta y haga clic con el botón derecho en la consulta y seleccione Ejecutar.

CREATE TABLE [dbo].[Blogs] (
    [BlogId] INT IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (200) NULL,
    [Url]  NVARCHAR (200) NULL,
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

CREATE TABLE [dbo].[Posts] (
    [PostId] INT IDENTITY (1, 1) NOT NULL,
    [Title] NVARCHAR (200) NULL,
    [Content] NTEXT NULL,
    [BlogId] INT NOT NULL,
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);

2. Crear la aplicación

Para simplificar las cosas, vamos a crear una aplicación de consola básica que use Database First para realizar el acceso a datos:

  • Abra Visual Studio.
  • Archivo - > Nuevo - > Proyecto
  • Seleccione Windows en el menú de la izquierda y Aplicación de consola
  • Escriba DatabaseFirstSample como nombre.
  • Seleccione Aceptar.

 

3. Modelo de ingeniería inversa

Vamos a usar Entity Framework Designer, que se incluye como parte de Visual Studio, para crear nuestro modelo.

  • Proyecto -> Agregar nuevo elemento...

  • Seleccione Datos en el menú de la izquierda y, a continuación, ADO.NET Entity Data Model.

  • Escriba BloggingModel como nombre y haga clic en Aceptar.

  • Se inicia el Asistente para Entity Data Model.

  • Seleccione Generar desde base de datos y haga clic en Siguiente.

    Wizard Step 1

  • Seleccione la conexión a la base de datos que creó en la primera sección, escriba BloggingContext como nombre de la cadena de conexión y haga clic en Siguiente.

    Wizard Step 2

  • Haga clic en la casilla situada junto a "Tablas" para importar todas las tablas y haga clic en "Finalizar".

    Wizard Step 3

 

Una vez que el proceso de ingeniería inversa completa el nuevo modelo se agrega al proyecto y se abre para que lo vea en Entity Framework Designer. También se ha agregado un archivo App.config al proyecto con los detalles de conexión de la base de datos.

Model Initial

Pasos adicionales en Visual Studio 2010

Si trabaja en Visual Studio 2010, hay algunos pasos adicionales que debe seguir para actualizar a la versión más reciente de Entity Framework. La actualización es importante porque proporciona acceso a una superficie de API mejorada, que es mucho más fácil de usar, así como las correcciones de errores más recientes.

En primer lugar, es necesario obtener la versión más reciente de Entity Framework desde NuGet.

  • Proyecto –> Administrar paquetes NuGet...Si no tiene la opción Administrar paquetes NuGet... debe instalar la versión más reciente de NuGet
  • Seleccione la pestaña En línea
  • Seleccione el paquete EntityFramework
  • Haz clic en Instalar

A continuación, es necesario intercambiar nuestro modelo para generar código que use la API DbContext, que se introdujo en versiones posteriores de Entity Framework.

  • Haga clic con el botón derecho en un lugar vacío del modelo en EF Designer y seleccione Agregar elemento de generación de código...

  • Seleccione Plantillas en línea en el menú de la izquierda y busque DbContext

  • Seleccione el Generador DbContext de EF 5.x para C#, escriba BloggingModel como nombre y haga clic en Agregar

    DbContext Template

 

4. Leer y escribir datos

Ahora que tenemos un modelo, es el momento de usarlo para acceder a algunos datos. Las clases que vamos a usar para acceder a los datos se generan automáticamente en función del archivo EDMX.

Esta captura de pantalla procede de Visual Studio 2012, si usa Visual Studio 2010, los archivos BloggingModel.tt y BloggingModel.Context.tt estarán directamente en el proyecto en lugar de anidados en el archivo EDMX.

Generated Classes DF

 

Implemente el método Main en Program.cs como se muestra a continuación. Este código crea una nueva instancia de nuestro contexto y, a continuación, la usa para insertar un nuevo blog. A continuación, usa una consulta LINQ para recuperar todos los blogs de la base de datos ordenados alfabéticamente por Title.

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            // Create and save a new Blog
            Console.Write("Enter a name for a new Blog: ");
            var name = Console.ReadLine();

            var blog = new Blog { Name = name };
            db.Blogs.Add(blog);
            db.SaveChanges();

            // Display all Blogs from the database
            var query = from b in db.Blogs
                        orderby b.Name
                        select b;

            Console.WriteLine("All blogs in the database:");
            foreach (var item in query)
            {
                Console.WriteLine(item.Name);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

Ahora puede ejecutar la aplicación y probarla.

Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
ADO.NET Blog
Press any key to exit...

 

5. Tratar con cambios en la base de datos

Ahora es el momento de hacer algunos cambios en el esquema de nuestra base de datos, cuando hagamos estos cambios también tenemos que actualizar nuestro modelo para reflejar esos cambios.

El primer paso es realizar algunos cambios en el esquema de la base de datos. Vamos a agregar una tabla Users al esquema.

  • Haga clic con el botón derecho en la base de datos DatabaseFirst.Blogging en el Explorador de servidores y seleccione Nueva consulta.
  • Copie el siguiente SQL en la nueva consulta y haga clic con el botón derecho en la consulta y seleccione Ejecutar.
CREATE TABLE [dbo].[Users]
(
    [Username] NVARCHAR(50) NOT NULL PRIMARY KEY,  
    [DisplayName] NVARCHAR(MAX) NULL
)

Ahora que el esquema está actualizado, es el momento de actualizar el modelo con esos cambios.

  • Haga clic con el botón derecho en un lugar vacío del modelo en EF Designer y seleccione "Actualizar modelo de base de datos...", se iniciará el Asistente para actualizaciones.

  • En la pestaña Agregar del Asistente para actualizaciones, active la casilla situada junto a Tablas, lo que indica que queremos agregar nuevas tablas desde el esquema. En la pestaña Actualizar se muestran las tablas existentes del modelo que se comprobarán si hay cambios durante la actualización. Las pestañas Eliminar muestran las tablas que se han quitado del esquema y también se quitarán del modelo como parte de la actualización. La información de estas dos pestañas se detecta automáticamente y solo se proporciona con fines informativos, no se puede cambiar ninguna configuración.

    Refresh Wizard

  • Haga clic en Finalizar en el Asistente para actualizaciones.

 

El modelo ahora se actualiza para incluir una nueva entidad User que se asigna a la tabla Users que hemos agregado a la base de datos.

Model Updated

Resumen

En este tutorial hemos visto el desarrollo de Database First, que nos permitió crear un modelo en EF Designer basado en una base de datos existente. A continuación, usamos ese modelo para leer y escribir algunos datos de la base de datos. Por último, hemos actualizado el modelo para reflejar los cambios realizados en el esquema de la base de datos.