Integración de Sistemas. Parte II. Diseño e implementación de aplicaciones Web con.net



Documentos relacionados
ADO.NET Entity Framework

Marcos de Desarrollo. Diseño e implementación de aplicaciones Web con.net

ADO.NET. Arquitectura de ADO.NET

Entity Framework 6 Para qué sirve?

Práctica sobre compartición de instancias remotas.

GUÍA DE TRABAJO N 11 LENGUAJE C# Programación de Software Articulación SENA Grado 10 Ing. Néstor Raúl Suarez Perpiñan Página 2 de 11

Programación en Internet. Proceso selectivo de promoción interna para el acceso a escalas del grupo A, subgrupo A1. Ref. PI-02/12

03.04 Unity. Integración de Sistemas. Parte II. Diseño e implementación de aplicaciones Web con.net

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Data Source. Lic. Esteban Calabria 2007

Tema: MAPEO OBJETO RELACIONAL (ORM) - ADODB

Tema 11 Bases de datos. Fundamentos de Informática

Patrones para persistencia (I) Ingeniería del Software II

Curso: Programación con Microsoft Visual C SHARP 2010.

Técnico Superior en Programación con Microsoft Visual Basic 2010

BASE DE DATOS: ENFOQUE ORIENTADO A OBJETOS. Dámaso López Aragón

ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Programación de sitios web Act 11: Reconocimiento de la unidad 3

Programación Orientada a Objetos Analista Programador Universitario Plan 2008 Año 2010

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

Base de datos relacional

JSF 2.0 (Java Server Faces) Yadira Jarvio Hernández

Curso: Programación con Microsoft Visual Basic 2010.

Entity FrameWork 6. Rafael Consuegra García Ingeniero de Sistemas. Twitter RafaelConsuegra Facebook Blog IM

Value Object (1) Agrupar un conjunto de atributos procedentes de uno o varios objetos del dominio. Data Transfer Object, Replicate Object

Ejercicios - Persistencia en Android: ficheros y SQLite

Base de Datos JDBC. Unidad: 1 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

9- Procedimientos almacenados.

11/06/2011. Alumno: José Antonio García Andreu Tutor: Jairo Sarrias Guzman

Los patrones Inversio n de Control (IoC) e Inyeccio n de Dependencias (DI). Co mo hacer consultas LINQ ma s abstractas.

Curso de Spring Framework

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

Introducción a los Sistemas de Gestión de Bases de Datos

Trabajos de Ampliación. Bases de datos NoSQL.

Repaso de Conceptos Básicos de Bases de Datos

JDBC. Una mini-introducci. introducción

Conexión ODBC Visual Basic - MSQL. Cristian Vidal Silva

Acceso a bases de datos MySQL con PHP

ADMINISTRACIÓN DE BASE DE DATOS

Marcos de Desarrollo. Diseño e implementación de aplicaciones Web con.net

Curso: Desarrollo de aplicaciones para escritorio y acceso de datos con.net FRAMEWORK 4.

Convirtiendo arboles de expresión lambda en diferentes strings.

Diplomado Java. Descripción. Objetivo. A quien está dirigido. Requisitos. Beneficios

ADO.NET con Base de datos SQL Server

T12 Vistas y tablas temporales

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 8. Elementos Básicos

Almacenar y acceder a Información universitaria. Almacenar y acceder información de tipo de imágenes u otros formatos.

Bases de Datos: Structured Query Language (SQL)

TUTORIAL DATA WAREHOUSE: OLAP - Analysis Services

Capa de Persistencia y Acceso a Datos con ADO.NET Entity Framework

Value Object (1) Agrupar un conjunto de atributos procedentes de uno o varios objetos del dominio

- Bases de Datos - - Diseño Físico - Luis D. García

1.1.- Objetivos de los sistemas de bases de datos Administración de los datos y administración de bases de datos Niveles de Arquitectura

CONSULTAS BASICAS EN SQL SERVER

Curso de JavaServer Faces

U.E JUAN DE VELASCO CREAR DATOS EN SQL

Prueba de Concepto, Informes XBRL vs. SGBDR.

Maestría en Bioinformática. Bases de Datos y Sistemas de Información. Diseño Lógico. Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.

a) Cita y comenta brevemente los grados de acoplamiento. Clasifícalos y ordénalos en orden creciente al nivel de acoplamiento asociado.

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

Entrarás a formar parte de nuestra bolsa de empleo a la que acuden las empresas en busca de nuestros alumnos.

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

Programación páginas web. Servidor (PHP)

CESAR BUSTAMANTE

ATLAS MANUAL DE USUARIO SERVICIO DE AUDITORIA

Java y MySQL. Ciclo de ejecución

Oracle 12c DISEÑO Y PROGRAMACIÓN

%& %)& '$!%*+ $, %%%&$ %%

Comparación entre Active Reports, Crystal Reports, y MS Reporting Services

BASE DE DATOS UNIVERSIDAD DE LOS ANDES FACULTAD DE MEDICINA T.S.U. EN ESTADISTICA DE SALUD CATEDRA DE COMPUTACIÓN II. Comenzar presentación

Solución Examen Junio 2007 (a) Ejercicio GeoTaxi (1h 20 min.) Diagrama de Casos de Uso y. Casos de uso (2,5 puntos) Modelo de Dominio (1,5 puntos)

ArquitecturaTécnica de TRAVEL OPEN APPS. Breve definición técnica de la plataforma Travel Open Apps

Practica 11: Conexión de Java con Bases de datos Access

VISIO: Herramienta CASE

Sistema para el alquiler, control de películas y clientes en una videotienda

Bases de datos relacionales y el modelo entidad-relación

Generación de código para Hibernate desde modelos UML

Programación Gambas 3 Prof: Mileti, P. Acceso a base de datos SQLite desde Gambas 3.

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Bases de Datos Relacionales

1. Bases de datos desde VB.Net 1.1 Introducción. Desde Vb Net 2005 se puede acceder a las siguientes bases de datos, utilizando las clases adecuadas.

Tema 1. Conceptos básicos

Capítulo 1: Introducción a los Sistemas de Gestión de Bases de Datos (SGBD)

10776 Developing Microsoft SQL Server 2012 Databases

BASES DE DATOS - SQL. Javier Enciso

Introducción a la programación orientada a objetos

BASE DE DATOS RELACIONALES

Programación de Consultas SQL ADO.Net LDP / DUOC-AV

JDBC: Java DataBase Conectivity

Registro y Comunicación Automatizada a Bases de Datos

PONTIFICIA UNIVERSIDAD JAVERIANA ANEXO 6: DOCUMENTACIÓN OBJETOS VIRTUALES DE APRENDIZAJE CREADOS Y SUS CORRESPONDIENTES ESPECIFICACIONES

GLOSARIO DE TÉRMINOS

1

Tutorial : Hacer Combos Dependientes tipo Departamento Ciudad en ASP. Net

- MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD. Rev. 01- FEBRERO 2013

PHPMYADMIN Y MYSQL. Para gestionar la base de datos MySQL, lo haremos desde la aplicación PhpMyAdmin.

Técnicas de Programación

procesamientodedatosconjava modalidadteleformación 210horas completamentegratuito

Lazarus Free Pascal Compiler

3.9 Patrón Distributed callback

Transcripción:

ADO.NET Entity Framework Integración de Sistemas ó Parte II. Diseño e implementación de aplicaciones Web con.net

Contenido Introducción Por qué el Entity Framework? Qué es el ADO.NET Entity Framework? Arquitectura y componentes Proveedores específicos de EF Entity Data Model (EDM) Entity Client (esql) Object Services (esql, Linq to Entities) i Implementación de DAOs con Entity Framework

Introducción Por qué el Entity Framework? Desajuste de impedancias i (impedanced mismach) Diferencias entre los modelos relacionales y los modelos de objetos Diseños guiados por modelos de dominio (Domain Driven Design, DDD) Proponen centrarse en el modelo conceptual o dominio de trabajo para resolver el problema Dan prioridad al problema a resolver! Patrones en DDD VO, Lazy Loading, Data Mapper, Unit of Work

Introducción Por qué el Entity Framework? Ignorancia de la persistencia i (Persistencei t Ignorance) ) Propugna el trabajo con objetos VO que para nada tengan que saber sobre el almacenamiento subyacente Construcción de objetos POCO (Plain Old CLR Objects) Relajación: IPOCO EF soportará objetos POCO en la segunda versión. En la primera versión podemos trabajar con objetos IPOCO

Introducción Qué es el ADO.NET Entity Framework? Es un OR/M (Object Relational / Mapping) para.net Incluído en.net Framework 3.5 SP1 y en VS2008 SP1 (11 de agosto de 2008) Incluye un nuevo proveedor de ADO.NET, llamado Entity Client, que habliita el acceso a los modelos conceptuales Incluye dos componentes fundamentales: Recursos para el entorno de trabajo: Asistente para diseño en VS y generación de código Librería: Físicamente, en el ensamblado System.Data.Entity.dll Sus espacios de nombres se anidan en System.Data (System.Data.Common, System.Data.EntityClient, System.Data.Mapping, System.Data.Metadata.Edm, etc.)

Arquitectura y componentes Componentes de la arquitectura de EF

Arquitectura y componentes

Arquitectura y componentes Proveedores específicos de EF Fabricante Provider para Devart (CoreLab) Oracle, MySQL, PostgreSQL, SQLite IBM DB2, Informix Dynamic Server, U2 MySQL AB MySQL Npgsql PostgreSQL 7.3+ y 8.x OpenLink Oracle, Ingres, Informix, Sybase, MySQL, PostgreSQL, DB2, Progress, SQL Sever, (cq. Datasource OpenLink ODBC o bridge JDBC) Phoenix SQLite Database Sybase SQL Anywhere Vista DB VistaDB databases Datadirect Tech. Orable, Sybase, SQL Server, DB2 Firebird Firebird databases

Arquitectura y componentes Entity Data Model (EDM) El modelo de datos basado en entidades d permite Definir los conjuntos de entidades y relaciones entre las entidades de nuestros modelos conceptuales Especificar cómo estos tipos se mapearán a la estructura de la fuente de almacenamiento relacional subyacente Para apoyar al EDM, se dispone de una serie de herramientas integradas dentro del entorno 1. Diseñador de modelos EDM (Entity Data Model Designer) 2. Asistente de modelos de entidades (Entity Data Model Wizard) 3. Asistente de actualización de modelos

Arquitectura y componentes > Entity Data Model (EDM) 1. Diseñador de modelos EDM (Entity Data Model Designer) Herramienta visual integrada dentro de VS 2008 que permite crear y editar modelos conceptuales Componentes: Superficie de diseño: crear y editar modelos Detalles de mapeo: ver y editar mapeos Navegación por el modelo: ver árboles de información sobre el modelo coneptual y el modelo o físico Nuevos elementos dentro de la ventana de herramientas

Arquitectura y componentes > Entity Data Model (EDM) 1. Diseñador de modelos EDM (Entity Data Model Designer) El EDM designer opera sobre ficheros edmx. Estos ficheros (XML) están formados por tres secciones: SSDL (Storage Schema Definition Language): estructura física de la BD CSDL (Conceptual Schema Definition Language): entidades del modelo conceptual MSL (Mapping Schema Language): también conocida como sección C-S, especifica cómo se relacionan las entidades del modelo conceptual con las tablas, columnas, etc. del modelo físico

Arquitectura y componentes > Entity Data Model (EDM) 1. Diseñador de modelos EDM (Entity Data Model Designer)

Arquitectura y componentes > Entity Data Model (EDM) 2. Asistente de modelos de entidades (Entity Data Model Wizard) Encargado de generar el archivo edmx Permite crear el modelo a partir de una BD ya existente o generar un modelo vacío Agregando un modelo de EDM

Arquitectura y componentes > Entity Data Model (EDM) 2. Asistente de modelos de entidades (Entity Data Model Wizard) Asistente de creación de EDM (1)

Arquitectura y componentes > Entity Data Model (EDM) 2. Asistente de modelos de entidades (Entity Data Model Wizard) Asistente de creación de EDM (2)

Arquitectura y componentes > Entity Data Model (EDM) 2. Asistente de modelos de entidades (Entity Data Model Wizard) Asistente de creación de EDM (3)

Arquitectura y componentes > Entity Data Model (EDM) 2. Asistente de modelos de entidades (Entity Data Model Wizard) Vista gráfica del archivo edmx

Arquitectura y componentes > Entity Data Model (EDM) 2. Asistente de modelos de entidades (Entity Data Model Wizard) Vista XML del archivo edmx

Arquitectura y componentes > Entity Data Model (EDM) 3. Asistente de actualización de modelos P it t li l d l EDM d é d h Permite actualizar el modelo EDM después de que se hayan realizado cambios en la BD

Arquitectura y componentes > Entity Data Model (EDM) Herencia El Modelo Relacional l no soporta directamente t el concepto de herencia La herencia se representa comúnmente en una base de datos de una de las tres siguientes formas: Mapeando una jerarquía entera de herencia a una sola tabla Tabla por jerarquía, Table per Hierarchy (TPH) Mapeando cada tipo en una jerarquía de herencia a una tabla diferente Tabla por tipo, Table per Type (TPT) Mediante una aproximación híbrida en la que se crea una tabla por cada clase concreta (subclase) y en la que cada una de las tablas almacena la información común Tabla por Clase Concreta (TPC) El EF soporta mapeado a cualquiera de estos tres modelos de herencia

Arquitectura y componentes Entity Client Es un nuevo proveedor de ADO.NET En lugar de trabajar con modelos físicos trabaja con modelos EDM Es agnóstico con respecto a la BD subyacente Implementa una arquitectura abierta y es capaz de trabajar con diferentes proveedores de EF específicos Estos proveedores se encargan de traducir las consultas sobre el modelo en consultas en el dialecto específico de la BD subyacente, así como de la ejecución de dichas consultas y la recuperación de los resultados El lenguaje utilizado para consultar los modelos de EDM se llama Entity SQL (esql) Es una variante de los dialectos de SQL Mejora ciertos aspectos de las consultas, como la navegación entre tablas

Arquitectura y componentes > Entity Client Entity SQL Ej: consultar el número de cuentas String connectionstring = ConfigurationManager. ConnectionStrings["MiniBankEntities"] ].ToString(); Int64 userid = 1234; using (EntityConnection connection = new EntityConnection(connectionString)) connection.open(); EntityCommand command = connection.createcommand(); //Entity SQL does not support the count(*) aggregate. Use count(0) instead. command.commandtext = "SELECT count(0) " + "FROM MiniBankEntities.Account as t " + "WHERE t.usrid = @usrid"; command.commandtype = CommandType.Text;

Arquitectura y componentes > Entity Client Entity SQL Ej: consultar el número de cuentas (cont.) EntityParameter usridparameter = command.createparameter(); usridparameter.parametername = "usrid"; usridparameter.dbtype = DbType.Int64; usridparameter.value = userid; command.parameters.add(usridparameter); /* It caches the query plan of the SQL dialect generated */ command.enableplancaching = true; int numberofaccounts = (int)command.executescalar(); connection.close(); Console.WriteLine("Number of Accounts: " + numberofaccounts);

Arquitectura y componentes > Entity Client Entity SQL Es posible consultar el SQL generado String generatedsql = command.totracestring(); Para el ejemplo anterior SELECT 1 AS [C1], [GroupBy1].[A1] AS [C2] FROM ( SELECT COUNT(0) AS [A1] FROM [dbo].[account] AS [Extent1] WHERE [Extent1].[usrId] = @usrid ) AS [GroupBy1]

Arquitectura y componentes Entity Client Con Entity Client y esql podemos cubrir la mayoría de las necesidades de una capa de acceso a datos Podemos consultar modelos conceptuales, de forma similar a cómo se consultaban BD en ADO.NET 2.0 Disponemos de clases equivalentes a las ya conocidas EntityConnection, EntityParameter, EntityCommand, EntityDataReader Sin embargo, todavía tenemos que realizar una transformación de los datos recuperados a objetos del dominio (materialización) Para evitar este paso, EF ofrece una nueva capa: Object Services

Arquitectura y componentes Object Services Conjunto de clases que permiten consultar y obtener resultados en términos de objetos Se reduce la cantidad y la complejidad del código Las consultas pueden realizarse Entity SQL (esql) Indep. del SGBD Strings (Interpretados en tiempo de ejecución) Linq (Language Integrated Queries) to Entities Lenguaje común y semántico Interpretado en tiempo de compilación Las consultas realizadas en Entity SQL y Linq-to-Entities son convertidas internamente a Canonical Query Tree, que se convierte a su vez en una pregunta entendible por el almacén de datos subyacente (e.g., en SQL en el caso de una BD relacional) Permite seguir los cambios en los entity objects y gestionar las relaciones entre ellos

Arquitectura y componentes Object Services Object Services EntityObject ObjectContext ObjectStateManager

Arquitectura y componentes Object Services ObjectContext t t Permite trabajar con el modelo conceptual Consultas: ObjectQuery; Inserciones:.AddToXXX(XXX entity);.addobject( ), Borrado:.DeleteObject Persistencia:.SaveChanges(); Gestión de la conexión Almacén en memoria de objetos Tracking de estado objetos:.attach(..),.dettach(..) ObjectStateManager MergeOption

Arquitectura y componentes Object Services ObjectStateManager t Seguimiento del estado de entidades Gestiona entradas EntityStateEntry para cada Entidad en almacén en memoria Cuando se cargan (Query, Attach): Unchanged Cuando se crean (AddObject): Added Cuando se modifican: Changed Cuando se borran: Deleted Cuando se destruye el ObjectContext: Detached Al aplicar ObjectContext SaveChanges() en Added Changed cambia a Al aplicar ObjectContext.SaveChanges() en Added, Changed, cambia a Unchanged

Arquitectura y componentes Object Services. Consultas. Entity SQL Ej: consultar el número de cuentas using (MiniBankEntities context = new MiniBankEntities()) String query = "SELECT VALUE account " + "FROM Account " + "WHERE account.usrid = @userid"; ObjectParameter param = new ObjectParameter("userId", userid); int result = context.createquery<account>(query, param).count(); Console.WriteLine(result);

Arquitectura y componentes Object Services. Consultas. Entity SQL Ej: recuperar las cuentas de un usuario (implementando Page-by-Page) P using (MiniBankEntities context = new MiniBankEntities()) String query = "SELECT value account " + "FROM Account " + "WHERE account.usrid = @userid " + "ORDER BY account.accid"; ObjectParameter param = new ObjectParameter("userId", userid); List<Account> accounts = context.createquery<account>(query, param). Execute(MergeOption.NoTracking).Skip(startIndex). Take(count).ToList(); foreach (Account a in accounts) Console.WriteLine(a.accId + ", " + a.balance);

Arquitectura y componentes Object Services. Consultas. LINQ-to-Entities Ej: consultar el número de cuentas using (MiniBankEntities context = new MiniBankEntities()) int result = (from acc in context.account where acc.usrid == userid select acc).count(); Console.WriteLine(result);

Arquitectura y componentes Object Services. Consultas. LINQ-to-Entities Ej: recuperar las cuentas de un usuario (implementando Page-by-Page) P using (MiniBankEntities context = new MiniBankEntities()) List<Account> accounts = (from a in context.account where a.usrid == userid orderby a.accid select a).skip(startindex).take(count).tolist(); ) ( ) () foreach (Account a in accounts) Console.WriteLine(a.accId + ", " + a.balance);

Implementación de DAOs con Entity Framework Siguiendo el enfoque visto en la primera parte de la asignatura, se ha diseñado un DAO genérico con las operaciones comunes a todas las clases persistentes: Create, Find, Exists, Update, Remove Cada entidad persistente tendrá su propio DAO, que extenderá el genérico para añadir operaciones propias El DAO genérico se encuentra en el proyecto ModelUtil, utilizado por MiniBank y MiniPortal como.dll La interfaz parametrizada del DAO genérico recibe 2 argumentos: E, es la clase persistente para la que se implementará el DAO PK, define el tipo del identificador de la clase persistente Los métodos están definidos en base a esos parámetros y no están acoplados a p y p ninguna tecnología de persistencia

Implementación de DAOs con Entity Framework Interfaz del DAO genérico public interface IGenericDao<E, PK> void Create(E entity); /// <exception cref="instancenotfoundexception"></exception> E Find(PK id); Boolean Exists(PK id); E Update(E entity); /// <exception cref="instancenotfoundexception"></exception> void Remove(PK id);

Implementación de DAOs con Entity Framework Implementación del DAO genérico con Entity Framework public class GenericDaoEntityFramework<E, PK> : IGenericDao<E, PK> where E : IEntityWithKey // entityclass is set in the constructor of this class private Type entityclass; // context must be set by means of Context property private ObjectContext context; private String entitycontainername; bli G i D E tit F k() public GenericDaoEntityFramework() this.entityclass = typeof(e);

Implementación de DAOs con Entity Framework Implementación del DAO genérico con Entity Framework [Dependency] public ObjectContext Context set context = value; entitycontainername = (context.metadataworkspace. GetItems<EntityContainer>(DataSpace.CSpace))[0].Name; context.defaultcontainername = entitycontainername; get // Forces the load of the metadata t context.metadataworkspace.loadfromassembly( entityclass.assembly); return context;

Implementación de DAOs con Entity Framework Implementación del DAO genérico con Entity Framework public EntityKey CreateEntityKey(PK id) EntityType entitytype = (EntityType)context.MetadataWorkspace.GetType(entityClass.Name, entityclass.namespace, DataSpace.CSpace); /* We assume that the DAO works only with single field primary * key classes */ String primarykeyfieldname = ((EntityType)entityType).KeyMembers.First().ToString(); // Create the entitykey EntityKey entitykey = new EntityKey(entityContainerName + "." + entityclass.name, new EntityKeyMember[] new EntityKeyMember(primaryKeyFieldName, id) ); return entitykey;

Implementación de DAOs con Entity Framework Implementación del DAO genérico con Entity Framework public void Create(E entity) String entitysetname = entitycontainername + "." + entityclass.name; context.addobject(entitysetname, entity); context.savechanges(); context.acceptallchanges(); /// <exception cref="instancenotfoundexception"/> public E Find(PK id) EntityKey entitykey = this.createentitykey(id); try E result = (E)context.GetObjectByKey(entityKey); return result; catch (ObjectNotFoundException) throw new InstanceNotFoundException(id, entityclass.fullname);

Implementación de DAOs con Entity Framework Implementación del DAO genérico con Entity Framework public Boolean Exists(PK id) Boolean objectfound = true; EntityKey entitykey = this.createentitykey(id); try object result = context.getobjectbykey(entitykey); catch (ObjectNotFoundException) objectfound = false; return objectfound; public E Update(E entity) // Last Updates are sent to database context.refresh(refreshmode.clientwins, entity); context.savechanges(); context.acceptallchanges(); return (E)context.GetObjectByKey(entity.EntityKey); y( y y y);

Implementación de DAOs con Entity Framework Implementación del DAO genérico con Entity Framework /// <exception cref="instancenotfoundexception"/> public void Remove(PK id) E objecttoremove = default(e); try // First we need to find the object objecttoremove = Find(id); context.deleteobject(objecttoremove); context.savechanges(); context.acceptallchanges(); catch (InstanceNotFoundException) throw;

Implementación de DAOs con Entity Framework Implementación del DAO genérico con Entity Framework catch (OptimisticConcurrencyException) context.refresh(refreshmode.clientwins, objecttoremove); context.deleteobject(objecttoremove); context.savechanges(); context.acceptallchanges(); catch (InvalidOperationException) throw new InstanceNotFoundException(id, entityclass.fullname);

Implementación de DAOs con Entity Framework Para implementar la persistencia i utilizando Entity Framework, el DAO necesita un objeto ObjectContext Se asigna y recupera a través de la propiedad p Context Se utilizará inyección de dependencias para establecer el valor de la propiedad Context Para implementar las operaciones podemos elegir EntitySQL o Linq to Para implementar las operaciones podemos elegir EntitySQL o Linq-to- Entities (hemos visto ejemplos de ambos)

Implementación de DAOs con Entity Framework Ej.: MiniBank ib > AccountDao

Implementación de DAOs con Entity Framework Ej.: MiniBank ib > AccountOperationDao ti