Indice Libro Entity Framework Krasis Press

Embed Size (px)

Citation preview

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    1/30

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    2/30

    ADO.NET EntityFramework

    Unai ZorrillaOctavio Hernndez

    Eduardo Quints

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    3/30

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    4/30

    Unai:

    Para Luca, centro y significado de mi vida

    Octavio:

    I can always find my Cuban skies

    In Rosalindas eyes

    (Rosalindas eyes, BILLY JOEL,

    from 52nd Street, 1978)

    A mi esposa Irina, en nuestro 25 aniversario

    Eduardo:

    And how can we win

    When fools can be kings

    (Knights of Cydonia, MUSE,

    from Back Holes & Revelations, 2006)

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    5/30

    ADO.NET ENTITY FRAMEWORK

    No est permitida la reproduccin total o parcial de este libro, ni su t ratamiento informtico,ni la transmisin de ninguna forma o por cualquier medio, ya sea electrnico, mecnico, por fotocopia, por registro u otros mtodos, sin el permiso previo y por escrito de lostitulares del Copyright. Dirjase a CEDRO (Centro Espaol de Derechos Reprogrfcos,www.cedro.org) si necesita fotocopiar o escanear algn fragmento de esta obra.

    DERECHOS RESERVADOS 2008, respecto a la primera edicin en espaol, porKrasis Consulting, S. L.

    www.krasis.com

    ISBN: 978-84-935489-9-5Depsito Legal: C

    Impreso en Espaa-Printed in Spain

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    6/30

    vii

    Prlogo

    Lo reconozco, el trabajo con bases de datos siempre me ha provocado una cierta pereza. Desde mis primeros pinitos en el universo de la informtica, siempre he en-contrado ms cercano el trabajo con objetos que con tablas, y ms natural la expresinde mis ideas en lenguajes de programacin como C++, C# Java que en T-SQL oPL/SQL; ni que decir tiene que un diagrama Entidad-Relacin distaba generalmente bastante de lo que yo tena en mente para mi aplicacin (que normalmente era undiagrama de clases). Tal vez fueron estas diferencias de representacin y tratamientolas que hicieron que me fuese alejando paulatinamente del mundo de las bases de datos

    y acercndome al mundo del desarrollo.Puede ser debido al paso del tiempo y la inquietud de investigar en nuevos campos,

    o tal vez por pura necesidad, pero he ido cediendo y acercndome al mundo de lastablas y de los motores relacionales. Pocas veces tendremos la suerte de tener quedisear algoritmos puros que no tengan que consumir datos provenientes de algunafuente de informacin, porque qu son las aplicaciones sino meros instrumentosde transformacin y manipulacin de datos? Hay cosas que hay que asumir cuantoantes para poder seguir avanzando: por muy mal que te lleves con tu compaero detrabajo, con el departamento de IT, con el panadero o con el del taller vas a tenerque verle frecuentemente! Es inevitable, y como es inevitable por el bien de nuestra

    salud mental, lo mejor ser llevarnos todo lo bien que podamos, aunque eso requieraun sacrificio por nuestra parte, no?

    En el tema que nos ocupa, ese acercamiento/sacrificio normalmente pasa por dife-rentes fases. Primero aprendes a traerte los datos a tu terreno, para saber manipularlosdonde eres fuerte, en la capa de negocio, as que te las la manta a la cabeza y a basede enviar sentencias SQL desde la capa de negocio, te traes los datos y trabajas en tulenguaje preferido. Luego llega una etapa en la que no quieres los datos, slo quiereslos resultados, as que T-SQL y PL/SQL se convierten en tus mejores amigos y todo loves encapsulable en el motor de bases de datos; te dedicas a llamar a procedimientosalmacenados y a recoger los resultados pero esos amigos te quitan el control sobrelos datos al que estabas acostumbrado, has acabado haciendo casi todo en la base dedatos! Es el momento de recuperar el control, te parece que la lgica de tu aplicacinno est donde debe estar. Y entonces pasas a trabajar con herramientas ORM. Alms puro estilo ONU, estas herramientas se encargan de lidiar con las diferenciasentre la capa de negocio y la capa de acceso a datos. Hablan en sentencias SQL parala capa de datos, y para nosotros en clases, objetos y procedimientos almacenadosencapsulados como mtodos. Aunque conservan la estructura de la base de datos,y sta puede no ser la ms adecuada para nuestra aplicacin, es lo ms parecido a programar independientemente de la base de datos y del motor relacional que habamosconocido. Hasta ahora.

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    7/30

    Olvdate de la tabla A o la tabla B: en lugar de trabajar contra una base de datos,vas a empezar a trabajar con algo ms cercano. Imagina que la base de datos te presentala estructura de su contenido en un folio en blanco (relaciones, columnas, datos) yque t puedes organizar esa informacin de la manera que ms te convenga para tuaplicacin; ests creando un modelo de los datos para tu aplicacin. Una vez tengasese modelo que te abstrae de la representacin fsica de la base de datos, e incluso delmotor de base de datos subyacente, tu aplicacin se centrar en consultar los datos deese modelo, y el modelo se encargar de actualizarse en la base de datos. Bienvenidoa Entity Framework !

    Con el libro que tienes en tus manos, aprenders a sacarle el mximo partido aesta nueva tecnologa destinada a marcar un antes y un despus en la relacin entre la

    capa de negocio y la capa de acceso a datos. Qu es Entity Framework? Cmo crearesos modelos de informacin? Cmo consultar la informacin de esos modelos desdela aplicacin? stas son solo algunas de las preguntas a las que encontrars aqu larespuesta, y es que tanto t como yo tenemos la suerte de que los autores del libro nose quedan en la superficie: son una especie de buceadores tecnolgicos . Cuando tengaslas respuestas a las preguntas descritas anteriormente y te encares con tus primeros proyectos en Entity Framework, empezars a apreciar la capacidad debuceo de losautores. Volvers al libro para ver las mejores prcticas en la herencia, cmo sacarleel mximo partido a una consulta, cmo llegar incluso a definir modelos ms all delo que te permiten las herramientas visuales de diseo editando el propio XML quelos define.

    Estos buceadores , Unai, Octavio y Eduardo, realizan una gran aportacin a lascomunidades de desarrolladores, nos ayudan a travs de sus blogs, sus conferencias,artculos y encima tienen tiempo para trabajar y para escribir libros! Personalmente,tengo la suerte de conocerles y de haber compartido momentos de trabajo y momentosde ocio con todos ellos, incluyendo hasta piques sobre cmo se comportar el compi-lador de C# en presencia de cierto cdigo, sin que valga compilarlo para ver qu pasa,verdad, Unai? Esto sera ocio o trabajo?

    Estimado lector, confo en que este libro te ser de gran utilidad, tanto en tu fasede descubrimiento de qu es Entity Framework y para qu puedes utilizarlo, comoen los retos que surjan ms adelante en el da a da del uso de la tecnologa. Autores(amigos), gracias por vuestra aportacin a la comunidad y por vuestra dedicacin almundo del software; as da gusto trabajar. Familiares y amigos de los autores, gracias por tener esa increble paciencia y por tenerlos siempre con una sonrisa en la cara; sinvosotros, esto no tiene sentido.

    Happy Hacking!

    David Salgadoblogs.msdn.com/DavidSalgado

    Development Evangelist, Microsoft Ibrica

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    8/30

    ix

    Autores

    Unai Zorrilla CastroMicrosoft MVP y MCTSActualmente, Unai es Development Advisor para grandes cuentas en Plain Concepts,empresa de la cual es socio fundador, y asiduo colaborador de Microsoft Ibrica entalleres para arquitectos, jornadas de formacin y giras de producto. Es tambin tutorde CampusMVP y ha publicado multitud de artculos tcnicos en revistas especializa-das como dotNetMana, MSDN Online y MTJ .NET.

    Octavio Hernndez LealC# MVP, MCT y MCSDIngeniero en Informtica con ms de veinte aos de experiencia en formacin, con-sultora y desarrollo de aplicaciones. Autor del libro C# 3.0 y LINQ y de mltiplesartculos relacionados con .NET para revistas especializadas. Es adems tutor deCampusMVP.

    Eduardo QuintsEduardo es Ingeniero en Informtica y trabaja como Tcnico Superior en el rea deInnovacin Tecnolgica de la Universidad de la Corua. Realiza consultoras de de-

    sarrollo para PlainConcepts, colabora habitualmente engeeks.ms y est especializadoen el desarrollo de soluciones web en .NET, bases de datos y arquitecturas orientadasa servicios.

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    9/30

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    10/30

    xi

    Contenido

    PRLOGO ..............................................................................................................................vii

    CONTENIDO .........................................................................................................................xi

    PRLOGO DE LOS AUTORES .............................................................................. xviiContenido del libro .............................................................................................................. xviiSobre los ejemplos ............................................................................................................... xvii

    Agradecimientos ..................................................................................................................... xix

    1. INTRODUCCIN ............................................................................................................1Por qu el Marco de entidades? ..........................................................................................1 Desajuste de impedancias ..............................................................................................2 Diseos guiados por modelos de dominio ...............................................................2 Patrones en diseos guiados por dominios ..............................................................3 Value Object ...................................................................................................................3 Lazy Loading ...................................................................................................................4 Data Mapper ...................................................................................................................5 Unit of Work ..................................................................................................................6

    PI, POCO y otras ideas .................................................................................................6Qu es el Marco de entidades? ...........................................................................................7 Arquitectura y componentes ........................................................................................8 Proveedores especficos de EF ..................................................................................9 Entity Data Model (EDM).........................................................................................10 Entity Client ..................................................................................................................21 Object Services ........................................................................................................... 22 LINQ to Entities ......................................................................................................... 23Conclusin ................................................................................................................................. 24

    2. CREACIN DE MODELOS CONCEPTUALES ......................................... 25Introduccin .............................................................................................................................. 25Elementos fundamentales: entidades y relaciones ........................................................ 25 1 - Caso prctico: Las entidades .............................................................................. 26 2 - Caso prctico: Las relaciones ............................................................................. 34 Restricciones en cascada dentro de las relaciones ............................................. 37 Cardinalidad de las relaciones ................................................................................... 39Tipos no escalares .................................................................................................................. 45La herencia de entidades ...................................................................................................... 50 1 - Caso prctico: Herencia por subtipo ............................................................... 50 2 - Caso prctico: Herencia por jerarqua ............................................................ 59 3 - Caso prctico: Herencia por tipo ......................................................................61Trabajando con procedimientos almacenados ................................................................ 68

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    11/30

    xii Contenido

    1 - Caso prctico: Mapeo de procedimientos almacenados ............................ 68Otras tareas en modelos conceptuales ............................................................................74 1 - Caso prctico: Entidades de solo lectura ........................................................74 2 - Caso prctico: Jerarqua en entidades de solo lectura .............................. 77 3 - Caso prctico: Consultas definitorias .............................................................. 79 4 - Caso prctico: Mltiples tablas en una nica entidad ................................80Conclusin ................................................................................................................................. 83

    3. ENTITY CLIENT .......................................................................................................... 85Entity Client como proveedor de ADO.NET ................................................................ 85 EntityConnectionStringBuilder ................................................................................... 87 EntityConnection ............................................................................................................91 EntityCommand y EntityDataReader ....................................................................... 94

    Trabajando con Entity Client ............................................................................................... 98 Jerarqua de tipos .......................................................................................................... 98 Consultas parametrizadas ......................................................................................... 107 Consultas polimrficas ............................................................................................... 108 Llamadas a procedimientos almacenados ..............................................................110 Revisin del cdigo SQL autogenerado .................................................................111 Transaccionalidad ..........................................................................................................112 Cacheo de los planes de consulta ...........................................................................113Conclusin ................................................................................................................................114

    4. SERVICIOS DE OBJETOS Y LINQ TO ENTITIES.................................117Los Servicios de objetos ......................................................................................................117 El contexto de trabajo ................................................................................................118 Las entidades ................................................................................................................. 122ObjectQuery .................................................................................................................. 130 Ejemplos de creacin de consultas ........................................................................ 132 Mtodos de creacin de consultas ........................................................................ 136 OfType ......................................................................................................................... 137 Where .......................................................................................................................... 138 Intersect ...................................................................................................................... 139 Except .......................................................................................................................... 139 Union ............................................................................................................................140 UnionAll ......................................................................................................................140 Distinct ........................................................................................................................140 OrderBy .......................................................................................................................141 GroupBy .......................................................................................................................141 Skip ............................................................................................................................... 142 Top ................................................................................................................................ 142Relaciones entre entidades y expansin de las consultas ........................................ 143 Expansin de consultas .............................................................................................. 149LINQ to Entities .................................................................................................................... 150 Mtodos de proyeccin y restriccin ....................................................................151 Mtodos de encuentro .............................................................................................. 157 Mtodos de particin ................................................................................................. 158

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    12/30

    Contenido xiii

    Mtodos de ordenacin ............................................................................................. 160 Mtodos de agrupacin ..............................................................................................161 Mtodos de agregacin .............................................................................................. 163 Mtodos de elementos y paginacin ..................................................................... 166Actualizacin de datos ......................................................................................................... 167 Mantenimiento del estado y la consistencia del grafo ..................................... 167 Insercin .........................................................................................................................182 Borrado ...........................................................................................................................187 Modificacin ...................................................................................................................205 Transaccionalidad en los Servicios de objetos ....................................................212Conclusin ................................................................................................................................213

    5. EL MARCO DE ENTIDADES EN EL MUNDO REAL...........................215EF y WCF .................................................................................................................................215 Equivalencia e identidad de los objetos .................................................................217 Serializacin de ciclos .................................................................................................222 Serializacin sin atributos ..........................................................................................223Precompilacin y cach de las consultas .......................................................................224 CompiledQuery ............................................................................................................225Generalizacin de consultas y actualizaciones .............................................................227Enlace a datos ........................................................................................................................240 Enlace a datos en Windows Forms .......................................................................240 Enlace a datos en WPF ............................................................................................. 245 Las fuentes de datos ............................................................................................... 246 Rutas de datos .......................................................................................................... 247 INotifyPropertyChanged ........................................................................................250 ObjectDataProvider ................................................................................................. 252 XmlDataProvider ......................................................................................................254 Colecciones de datos .............................................................................................. 255 Enlace a datos en ASP.NET mediante EntityDataSource ................................257Conclusin ...............................................................................................................................264

    6. LOS SERVICIOS DE DATOS DE ADO.NET .............................................265Servicios REST .......................................................................................................................265REST en WCF ........................................................................................................................266 UriTemplate ...................................................................................................................266 UriTemplateMatch ....................................................................................................... 270 Servicios web HTTP utilizando REST ...................................................................272 Qu son los Servicios de datos de ADO.NET .................................................. 274Utilizando los servicios ........................................................................................................277 Inicializacin y configuracin ....................................................................................277 Identif icadores de recursos y patrones de consulta ........................................280 Opciones avanzadas de consulta .............................................................................283 La opcin $filter ..........................................................................................................284 La opcin $top .............................................................................................................288 La opcin $skip ............................................................................................................289 La opcin $orderby ....................................................................................................289

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    13/30

    xiv Contenido

    La opcin $expand ......................................................................................................289 Manipulacin de las entidades .................................................................................290 Actualizacin mediante el verbo PUT ................................................................... 291 Insercin mediante el verbo POST ........................................................................294 Borrado mediante el verbo DELETE .....................................................................296 Operaciones de manipulacin de datos en lote ................................................ 297 Intercepcin y creacin de operaciones ..............................................................297 Integracin de los Servicios de datos en ASP.NET AJAX .............................303 Acceso a los Servicios de datos desde aplicaciones cliente ...........................315Conclusin ...............................................................................................................................329

    APNDICE A: FUNDAMENTOS DE LINQ ..................................................... 331Presentacin de LINQ ......................................................................................................... 331

    Las expresiones de consulta .............................................................................................. 333Reescritura de las expresiones de consulta .................................................................338La (no) semntica de los operadores de consulta .....................................................340Resolucin de llamadas a operadores ............................................................................341Ejecucin diferida ..................................................................................................................342Los operadores de consulta estndar ............................................................................343El patrn de expresiones de consulta ............................................................................344Sintaxis de las expresiones de consulta .........................................................................345Tabla de operadores de consulta estndar ...................................................................346Algunos ejemplos .................................................................................................................. 351 Ejemplos bsicos .......................................................................................................... 351 Productos cartesianos ................................................................................................ 353 Restriccin de productos y optimizacin de consultas ...................................353 Encuentros internos ....................................................................................................354 Grupos ............................................................................................................................355 Continuaciones ............................................................................................................. 357 Encuentros agrupados ................................................................................................ 358 La clusula let ............................................................................................................... 359Proveedores de LINQ .........................................................................................................360La interfaz IQueryable ................................................................................................ 361 Qu hacen los operadores de IQueryable..................................................363Sobre la disponibilidad de operadores y funciones ....................................................365Mecanismos de actualizacin .............................................................................................366

    APNDICE B: REFERENCIA DE ENTITY SQL ............................................369Diferencias con otros dialectos de SQL........................................................................369Sentencias de consulta ......................................................................................................... 370 FROM .............................................................................................................................. 370 SELECT ........................................................................................................................... 371 WHERE ........................................................................................................................... 374 GROUP BY .................................................................................................................... 374 HAVING ......................................................................................................................375 ORDER BY ....................................................................................................................375Expresiones ............................................................................................................................. 376

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    14/30

    Contenido xv

    Literales .......................................................................................................................... 376 El literal NULL .......................................................................................................... 376 Literales booleanos .................................................................................................. 376 Literales enteros ....................................................................................................... 376 Literales decimales ...................................................................................................377 Literales de punto flotante ................................................................................... 377 Literales de cadena .................................................................................................. 377 Literales de fecha y hora ....................................................................................... 378 Literales de hora ...................................................................................................... 378 Literales DateTimeOffset ....................................................................................... 378 Literales binarios ...................................................................................................... 379 Identif icadores globales nicos .............................................................................379 Otras vas de creacin de constantes ............................................................... 379

    Parmetros .....................................................................................................................379 Operadores ....................................................................................................................380 Operadores aritmticos .........................................................................................380 Operadores de comparacin ................................................................................381 Operadores lgicos..................................................................................................382 La expresin CASE ..................................................................................................382 Operador de acceso a miembros .......................................................................383 Operadores de tipo .................................................................................................383 Operadores de conjuntos ......................................................................................385 Operadores de construccin de tipo ................................................................387 Operadores de referencia .....................................................................................388 Operador de navegacin ........................................................................................ 392 Funciones cannicas .................................................................................................... 393 Funciones de agregacin ........................................................................................ 393 Funciones matemticas ........................................................................................... 396 Funciones de manipulacin de cadenas ............................................................. 397 Funciones de fecha y hora ....................................................................................398 Funciones de manipulacin de bits .....................................................................400 Otras funciones ........................................................................................................401

    APNDICE C: OPCIONES DE EDMGEN.EXE .............................................403

    APNDICE D: REGLAS DE SERIALIZACIN DE JSON .......................407 Valores nulos .................................................................................................................407 EntityType .......................................................................................................................407 Propiedades de navegacin .......................................................................................408 Contenidos diferidos ..................................................................................................408

    APNDICE E: OPCIONES DE DATASVCUTIL.EXE..................................411

    NDICE ....................................................................................................................................413

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    15/30

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    16/30

    Contenido xvii

    Prlogo de los autores

    Escribir un libro es una tarea ardua, que conlleva muchas horas de dedicacin.Si sumamos a esto lo difcil que es hablar sobre una tecnologa que acaba de salir almercado y sobre la que no existe una experiencia de uso previa, se imaginar ustedla cantidad de trabajo que ha sido necesario para sacar esta obra adelante. Desde los

    primeros momentos en que pensamos en escribir este libro, a la vista de las primeras betas de un producto que nos maravillaba, los autores desebamos crear una obra plural, en la que interviniera la mayor cantidad de gente posible, aportando sus ideasy sus consejos. Creemos firmemente que este deseo se ha convertido en realidad, y

    que usted tiene entre las manos un ejercicio de sinceridad sobre una tecnologa que puede marcar un antes y un despus en su forma de desarrollar y de abordar los proyectos de software centrados en datos.

    Contenido del libroEl libro consta de seis captulos, ms cinco apndices de referencia.

    Los primeros cinco captulos cubren ampliamente la gran mayora de las

    caractersticas del Marco de entidades de ADO.NET (ADO.NET EntityFramework). Comenzando por un captulo de introduccin a la tecnologa,luego se contina con un captulo centrado en la creacin de modelos con-ceptuales de entidades, que describe desde los apartados ms bsicos hastalas posibilidades ms avanzadas por medio de ejemplos claros y prcticos.Los siguientes captulos introducen al lector en las distintas posibilidades quela tecnologa ofrece para consultar y actualizar los datos de un modelo con-ceptual, todo ello de una forma ordenada, tal y como se fueron concibiendolos distintos subsistemas que componen el Marco de entidades, y explicandolas ventajas e inconvenientes de cada uno de ellos.

    Para finalizar, el ltimo captulo del libro ofrece una introduccin a ADO.

    NET Data Services, una aplicacin prctica del Marco de entidades desa-rrollada por Microsoft para exponer la infraestructura que conforma estatecnologa a travs de servicios REST.

    Sobre los ejemplosEl cdigo fuente de todos los ejemplos del libro se encuentra disponible para su des-carga en el sitio Web del editor, www.krasispress.com . Para compilarlo y ejecutarlo,deber tener instalada cualquier edicin de Visual Studio 2008 o incluso Visual C#Express 2008, siempre que incluyan el Service Pack 1, en el que se incorpor el

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    17/30

    xv iii Contenido

    Marco de entidades a .NET Framework, y los asistentes que facilitan el uso de estatecnologa a Visual Studio 2008.

    La casi totalidad de los ejemplos del libro se apoya en una base de datos de SQLServer 2005 diseada para almacenar la informacin que utiliza y genera una tiendaonline que vende productos digitales (software, msica, vdeos, etc.), a la que hemosllamado Media Amazon, o ms sucintamente MAmazon . Encontrar una copia deseguridad de esta base de datos junto con el cdigo de los ejemplos.

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    18/30

    Contenido xix

    Agradecimientos

    Los autores quieren aprovechar la ocasin para agradecer a los siguientes colectivose individuos:

    Al equipo de desarrollo del Marco de entidades de ADO.NET por el gran

    trabajo realizado; trabajo al que seguirn sin duda alguna nuevas y excitantesversiones que ya estamos deseando ver y asimilar. En especial, vaya nuestroagradecimiento a Danny Simmons , Alex James , Diego Vega y Pablo Castro ,cuyas respuestas y comentarios han ayudado en gran medida a enriqueceresta obra.A todo el grupo DPE de Microsoft Ibrica, por su continuo apoyo a todo lo

    relacionado con el desarrollo con .NET Framework en general y a la escri-tura de este libro en particular. Nuestro agradecimiento a David Carmona ,David Salgado , Jos Murillo , Alfonso Rodriguez , Beatriz Ordez , EthelGarca , Isabel Gmez , Salvador Snchez , Csar de la Torre , AntonioGmez y Aurelio Porras , as como tambin a Cristina Gonzlez Herrero ,que realiza una encomiable labor como responsable del programa MVP deMicrosoft.

    A todos los miembros de esa gran familia en expansin que es

    Plain Con-cepts (www.plainconcepts.com ), y en particular de aquellos que han parti-cipado activamente en la creacin (aportando ideas o ejemplos) y revisin deeste libro, como Yamil Hernndez , Cristina Gonzlez Muoz y VicenteGarca .A quienes han participado en la revisin desinteresada de este libro, apor-

    tando enriquecedores comentarios: Isabel Gmez , David Salgado , AugustoRuiz y Alberto Poblacin .Por ltimo, no nos gustara dejar pasar la ocasin de agradecer a todos aquellos

    amigos (ms que clientes ya) que se han atrevido a adoptar de nuestra manoesta tecnologa en sus proyectos, y gracias a los cuales hemos obtenido unagran cantidad de feedback que sin dudas nos ha ayudado a comprender lasnecesidades y preocupaciones que los desarrolladores sienten al enfrentarse

    por primera vez a una tecnologa novedosa como es el Marco de entidades,y a saber lo que los lectores podran necesitar de un libro como ste. A lagente de Acciona , Enyca , Hispanitas , Taya , etc. - muchas gracias!

    Madrid, agosto de 2008

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    19/30

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    20/30

    CAPTULO 1

    1

    Introduccin

    En la primera parte de este captulo, trataremos de introducir al lector en los dis-tintos argumentos y consideraciones que han sido tenidos en cuenta y servido como

    base para el desarrollo del Marco de entidades de ADO.NET (ADO.NET EntityFramework, que abreviaremos en lo adelante por EF ), as como en el conjunto deconceptos que han surgido alrededor de ste. A continuacin, veremos qu es EF,cmo es su arquitectura y cules son los elementos fundamentales que forman partede l.

    POR QU EL MARCO DE ENTIDADES?Mientras se redactaba este libro, ya estbamos dando charlas de introduccin con las

    primeras betas del producto. Uno de los principales objetivos de estas sesiones era elde intentar hacer llegar a los asistentes los distintos razonamientos y objetivos quehan dado pie al surgimiento de esta nueva tecnologa, as como de una nueva formade trabajo. Una de las diapositivas ms sencillas, y sin embargo ms ilustrativas, deesas presentaciones consista nicamente en una frase similar a Los desarrolladoresno somos fontaneros . Seguramente a usted, estimado lector, esto le parecer unaverdad de Perogrullo, y no le faltar razn; pero aunque no se lo crea, esta verdad laolvidamos con demasiada facilidad. A lo largo del tiempo, los desarrolladores hemosido aprendiendo, creando y mejorando muchos conceptos de los lenguajes orientadosa objetos (OO), que son aplicados constantemente en todos nuestros desarrollos.Elementos como la herencia de clases y el polimorfismo son esenciales en la mayorade los desarrollos, puesto que nos facilitan y nos abren nuevas y mejores vas detrabajo; numerosos son, adems, los libros y documentacin acerca de los patronesde diseo y cmo estos se aplican en las diferentes implementaciones que realizamos.Desde un punto de vista de calidad, nuestro trabajo adems se evala utilizandomtricas conocidas como la Profundidad de la herencia, Complejidad del cdigoo el Grado de mantenibilidad, muy ligadas a los lenguajes OO.

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    21/30

    2 ADO.NET Entity Framework

    Hasta el presente, la mayora de los desarrollos que involucraban el acceso auna fuente de datos como Microsoft SQL Server, Oracle u otro motor relacional nohacan uso de estos conceptos y/o mtricas de calidad, debido a la estrecha ligaznde los modelos relacionales con el cdigo que los utiliza. Esta relacin propicia que,en demasiadas ocasiones, el desarrollador no pueda exponer realmente todas suscapacidades y las de los lenguajes en los que se apoya para su trabajo.

    Imagine que en una misma sala juntramos a un profesional de bases de datos y aun desarrollador de un lenguaje OO, y a ambos se les expusiera un mismo problemacon el fin de que trataran de resolverlo. Si, una vez terminado el ejercicio, nos

    planteramos revisar los resultados, nos daramos cuenta de las diferentes tcnicasy razonamientos que ambos habran aplicado. Por un lado, el desarrollador habraaplicado algunos, o muchos, de los conceptos mencionados anteriormente, como laherencia de clases o el polimorfismo; mientras que el profesional de bases de datoshabra hecho uso de otros conceptos, tales como la normalizacin o desnormaliza-cin de tablas, el uso de tipos adecuados, ndices y otros elementos familiares enese mundo.

    Desajuste de impedanciasEstas diferencias entre los modelos relacionales y modelos de objetos conformanlo que se conoce habitualmente como desajuste de impedancias ( impedance mis-match ). Existen muchas diferencias entre ambos mundos, algunas muy obvias como,

    por ejemplo, la diferencia en el concepto de relacin en el mundo relacional yen un mundo orientado a objetos. En los modelos relacionales, las relaciones seestablecen mediante la duplicacin de los datos en distintas tablas, de tal formaque, si deseamos relacionar un tupla de una tabla B con una tupla de una tabla A,deberemos establecer en la tabla B una columna que contenga un valor que permitaidentificar al elemento de la tabla A con el que la queremos relacionar. Sin embargo,en los lenguajes de programacin orientados a objetos como C# o Visual Basic lasrelaciones no necesitan apoyarse en la duplicidad de datos; por seguir con el ejemplo,

    bastar a con poner una referencia en el objeto B al objeto A con el que se deseaestablecer una relacin, es decir, una asociacin.

    Salvar este desajuste de impedancias ha sido uno de los objetivos centrales demltiples teoras y tecnologas a lo largo de estas ltimas dcadas.

    Diseos guiados por modelos de dominio

    Domain Driven Design (DDD)Este trmino lo acu por primera vez Eric Evans , en su li-bro Domain Driven Design: Tackling Complexity in the Heart of

    Software (Addison-Wesley, 2004).

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    22/30

    Introduccin 3

    A lo largo de los ltimos aos, la comunidad de desarrolladores ha ido creandoy evolucionando una filosofa de trabajo centrada en la definicin de modelos con-ceptuales y dominios de trabajo, en la que el reto que realmente se intenta resolverconsiste en separar el problema de las distintas tcnicas y argucias de desarrollohabituales para los programadores. Los diseos guiados por modelos de dominio

    proponen centrarse en el modelo conceptual o dominio de trabajo para resolver el problema. En realidad, DDD no puede considerarse como una metodologa en smisma, ni por supuesto como un tipo de tecnologa; no es ms que una manera de

    pensar, una forma de abordar el desarrollo de los proyectos que tiene como prioridadel problema a resolver. Es curioso como esta verdad tan simple muchas veces quedarelegada a un segundo plano cuando hablamos de tecnologa.

    Definicin de modeloPerdnenos, estimado lector, pero la definicin de modelo tienetantas acepciones, que no sabramos decantarnos por una nicade ellas. En nuestro escenario, un modelo representa un sis-tema de abstracciones creado a partir de un sistema real quepuede tener distintas presentaciones, cdigo, diagramas, etc.

    Con el fin de apoyar estas ideas, desde la comunidad de desarrolladores em- pezaron a surgir nuevos patrones de diseo que se fundamentan en los modelosconceptuales, o que tienen como objetivo resolver problemas habituales cuando seempieza a aplicar esta forma de pensar para realizar nuestros trabajos de desarrollo.Algunos de estos patrones se presentan a continuacin, puesto que sern de granayuda para entender muchos de los aspectos esenciales de EF.

    Patrones en diseos guiados por dominiosPor supuesto, esta seccin no pretende abordar todos los patrones de diseo conocidosy usados en el desarrollo de aplicaciones; ni siquiera presentaremos estos patronesde una forma acadmica. Nuestro objetivo aqu consiste nica y exclusivamenteen presentar y explicar de forma somera algunos de los patrones de diseo mshabituales, los cuales probablemente ya conocer, y que estn muy ligados con EF.

    Value ObjectEl patrn Value Object, tambin conocido con otros nombres, como Data TransferObject (DTO), es uno de los patrones ms conocidos y usados en arquitecturasde mltiples capas. Martin Fowler, en su libro Patterns Of Enterprise ApplicationArchitecture (Addison-Wesley, 2002), define un DTO como un objeto que trans-

    porta datos entre procesos con el fin de reducir el nmero de llamadas. Cuandotrabajamos sobre sistemas distribuidos, los costes asociados a las llamadas suelen ser

    bastante altos, por lo que uno de los objetivos principales es reducir el nmero dellamadas que se realizan a esos sistemas. Un DTO permite mantener una coleccin

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    23/30

    4 ADO.NET Entity Framework

    de datos, ms o menos relacionados, y transportarlos de una vez en las llamadas alas interfaces remotas, por lo que debe de ser un objeto que se pueda seriar. Segu-ramente, si usted conoce o ha trabajado alguna vez con ADO.NET, podr identificarrpidamente a DataSet o DataTable como clases tpicas para objetos DTO.

    Uno de los principales inconvenientes de los objetos DTO dentro de los modelosde dominio suele estar relacionado con la transferencia de estos objetos, puestoque, en la mayora de ocasiones, stos estarn conectados mediante asociacionesa otros objetos que tambin deberan seriarse. Por otro lado, los programadoresacostumbran a compartir la capa de negocio con los clientes de los sistemas remotos,de tal forma que, equivocadamente, estos objetos no solamente son contenedores dedatos, sino que adems incluyen cierta lgica de negocio que en teora no deberanincorporar.

    De forma usual, los campos de un DTO son tipos primitivos ( string , int ,DateTime , etc.) u otros DTO (formando lo que se conoce como tipos complejos ),que permiten representar la estructura de los datos que deseamos transportar.

    Figura 1: Value Object

    Lazy Loading

    El patrn Lazy Loading (literalmente, carga retardada) es otro de los patronesms utilizados cuando hablamos de modelos conceptuales. Lazy Loading permiteretardar la carga de un determinado objeto o coleccin de objetos (carga que sueleser costosa) justamente hasta el momento en el que el objeto o la coleccin de objetosson necesarios. Este patrn contribuye, sin duda alguna, a mejorar la eficiencia enlas operaciones de programacin habituales.

    Imagine que usted ha construido dos DTO para representar las estructuras dedatos Cliente y Pedido , en las que ha incluido una asociacin dentro del DTOCliente con una coleccin de pedidos; es decir, ha establecido una relacin 1:N entre Cliente y Pedido . Si cargramos de la base de datos los datos de undeterminado cliente, tendramos dos opciones: por un lado, cargar simultneamentetodos sus datos y los de los pedidos asociados con l ( eager loading ); por el otro,solamente cargar los datos del cliente, sin cargar por el momento sus pedidos ( lazyloading ). Esta ltima opcin suele ser lo ms deseable en la mayora de las ocasio-nes, puesto que en muchas operaciones solamente necesitaremos tener en cuenta losdatos propios del cliente. Llegado el momento en el que los pedidos del cliente sean

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    24/30

    Introduccin 5

    necesarios, se dispondr de un mtodo que permita cargarlos y ponerlos a disposicinde quien los desea usar.

    Veremos, a lo largo de este libro, como EF dispone de mecanismos para realizarcargas retardadas (la opcin por defecto), o indicar la carga instantnea de relaciones.

    Nuevamente, recomendamos leer a Martin Fowler para profundizar ms sobre esteconocido patrn de diseo.

    Figura 2: Lazy Loading

    Data Mapper

    Los objetos y las bases de datos relacionales disponen de diferentes mecanismos para estructurar los datos. Muchos de los conceptos relacionados con los objetoscomo herencia, polimorfismo y/o colecciones no tienen una representacin directaen los modelos relacionales. Cuando se construye un modelo de objetos para resol-ver un determinado problema, es totalmente lgico usar las capacidades anteriores;sin embargo, esto introduce una gran complejidad cuando se intenta cuadrar losesquemas de objetos con los esquemas de los modelos relacionales. El patrn DataMapper tiene como objetivo separar las estructuras de los objetos de las estructurasde los modelos relacionales y realizar la transferencia de datos entre ambos. Con eluso de un Data Mapper, los objetos son ignorantes del esquema presente en la basede datos y, por supuesto, no necesitan hacer uso de cdigo SQL.

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    25/30

    6 ADO.NET Entity Framework

    Figura 3: Data Mapper

    Unit of Work

    Cuando se trabaja con datos fuera de una base de datos mediante objetos DTO, esimportante, por no decir esencial, poder llevar un seguimiento de las operacionesque se realizan sobre estos datos, cundo se cambian los valores de algunas de sus

    propiedades, cundo se elimina o inserta algn DTO, etc. Por supuesto, se podrahacer una llamada a la base de datos cada vez que se realiza una operacin sobreun determinado dato; pero esto al final provocara un exceso de llamadas a la basede datos, que ralentizaran la ejecucin normal del sistema. El patrn Unit of Work

    permite mantener y llevar el seguimiento de todas las operaciones que se realizancontra una estructura de datos en un determinado proceso de negocio, para queuna vez acabado el proceso de negocio se puedan volcar los resultados de todas lasoperaciones realizadas a la base de datos.

    Figura 4: Unit of Work

    PI, POCO y otras ideasHasta este momento, hemos visto como DDD nos propone centrarnos en un dominio

    conceptual como principal punto de partida para resolver los problemas; adems,hemos hecho una presentacin somera de algunos patrones de diseo muy relacio-nados con DDD, como Value Object (fjese que stos son los objetos de trabajo delos dominios conceptuales), Data Mapper y Unit of Work. Estos tres patrones tienentambin mucho que ver con otro concepto conocido como PI (Persistence Ignorance,o Ignorancia de la persistencia), el cual propugna el trabajo con objetos DTO quesolamente conozcan del dominio conceptual en el que estn creados y para nadatengan que saber sobre el almacenamiento subyacente; lo que ayuda a centrarse real-mente en los problemas, sin tener en cuenta artefactos propios de una determinadatecnologa. Hacer que nuestros objetos DTO sean ignorantes de la tecnologa, y deuna determinada clase o interfaz base, es lo que se conoce como la construccin de

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    26/30

    Introduccin 7

    objetos POCO (Plain Old CLR Objects), concepto de sobra conocido en marcos detrabajo como NHibernate, as como en otras plataformas de desarrollo como Java,donde estos objetos se denominan POJO (Plain Old Java Objects).

    El trabajo con objetos POCO es realmente una tarea ardua y que supone algnsacrificio en desarrollo, ya que al no poder implementar clases o interfaces baseo hacer uso de una tecnologa concreta, tampoco puede aprovecharse aquello quetodos esos elementos nos aportan. Algunos autores relajan los requisitos de un objetoPOCO permitiendo que stos puedan implementar algn tipo de contrato o interfaz;esta relajacin se conoce como IPOCO.

    En la primera versin de EF no tenemos la posibilidad de trabajar con objetosPOCO, aunque es una promesa del grupo de producto que esta posibilidad sea viablea partir de la segunda versin. No obstante, en esta primera versin s podemos

    trabajar con objetos IPOCO, aunque sta no es la opcin por defecto y deberemosser nosotros los que realicemos la construccin de los objetos y la implementacinde las interfaces para que stos puedan trabajar con el motor del Marco de entidades.Por defecto, EF se decanta por otra filosofa, conocida en la teora como Prescrip-tive Classes (Clases prescriptivas), y genera objetos que heredan de una clase base

    predeterminada, que en el caso de EF se llama EntityObject .

    QU ES EL MARCO DE ENTIDADES?El Marco de entidades de ADO.NET (ADO.NET Entity Framework, EF) es un marco

    de trabajo para la plataforma .NET que permite superponer varias capas de abstrac-cin sobre el almacn relacional con el fin de hacer posible una programacin msconceptual (basada en los conceptos del dominio con el que se trabaja) y de reducira una mnima expresin el desajuste de impedancias causado por las diferencias entrelos modelos de programacin relacional y orientado a objetos.

    Por una parte, es de destacar que EF es una parte integral de ADO.NET a partirde .NET Framework 3.5 SP1. Ms exactamente, EF incluye un nuevo proveedor deADO.NET, llamado Entity Client , que habilita el acceso a los modelos conceptuales.A lo largo de este libro, iremos viendo la uniformidad conceptual entre este provee-dor y el resto de los proveedores de ADO.NET. Por otra parte, como todo marco detrabajo, EF incluye dos componentes fundamentales:

    Recursos para el entorno de desarrollo , y en particular un asistente parael diseo visual de modelos de entidades dentro de Visual Studio y la gene-racin de cdigo a partir de stos.Librera . Los tipos que componen el Marco de entidades se implementan f-sicamente en el ensamblado System.Data.Entity.dll . La organizacinlgica de esos tipos es tal, que sus espacios de nombres se anidan dentro delespacio System.Data , como se muestra en la tabla a continuacin. Todoesto refuerza la idea de la pertenencia de EF a la familia de ADO.NET.

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    27/30

    8 ADO.NET Entity Framework

    Espacio de nombres Contenido aadido por EF

    System.Data Tipos bsicos de EF, como EntityObject , En-tityKey o EntityState .

    System.Data.CommonTipos relacionados con la implementacin de pro-veedores de EF.

    System.Data.Common. Com-mandTrees

    Tipos que se utilizan en los rboles de expresionesde LINQ to Entities.

    System.Data.EntityClient

    Implementacin del proveedor ADO.NET de EF.Contiene tipos cuyos nombres le resultarn muyfamiliares, como EntityConnection , Enti-

    tyCommand y EntityDataReader .

    System.Data.MappingTipos que se utilizan en el mapeo entre entidadeslgicas y fsicas.

    System.Data.Metadata.EdmTipos que permiten acceder a los metadatos (defini-ciones) de los modelos.

    System.Data.Objects

    Tipos que implementan el modelo de programacinque hace posible un trabajo basado en objetoscontra datos provenientes de una base de datos re-

    lacional. En particular, en este espacio de nombresreside la clase ObjectQuery , que implementaIQueryable y por tanto sirve como origen

    para las consultas integradas sobre modelos de en-tidades (para una introduccin a LINQ, consulte elApndice).

    System.Data.Objects.Classes

    Tipos que representan los principales conceptosque se utilizan en los modelos. Normalmente, noes necesario interactuar directamente con las clasesde este espacio, pues el generador de cdigo crea

    versiones ms especficas de ellas.

    Tabla 1: Espacios de nombres relacionados con EF

    Arquitectura y componentesEF se apoya en seis elementos fundamentales construidos encima de ADO.NET 2.0,tal y como se puede apreciar en la siguiente figura.

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    28/30

    Introduccin 9

    Figura 5: Componentes de la arquitectura de EF

    A continuacin presentamos los conceptos fundamentales relacionados con cadauno de estos elementos (de abajo hacia arriba), entrando ms profundamente en cadauno de ellos en los posteriores captulos que acompaan este libro.

    Proveedores especficos de EF Una de las caractersticas ms atractivas de EF es su agnosticismo con relacin ala base de datos contra la que se trabaja. Tal y como hemos comentado anteriormen-te, EDM se encarga de implementar el patrn Data Mapper entre las entidades denuestro modelo conceptual y el esquema fsico de la base de datos subyacente. Msadelante veremos cmo el trabajo que se realiza sobre estas entidades es traducidodirectamente al dialecto especfico de la base de datos con la que estemos trabajando,gracias a los proveedores de datos de EF . Por defecto, en la primera versin deesta tecnologa tendremos un proveedor especfico para SQL Server, en sus versiones2000, 2005 y 2008, sta ltima con alguna limitacin para los nuevos tipos espacialesintroducidos. Adems de estas bases de datos, podremos trabajar tambin con SQLServer Compact Edition, en versin 3.5 SP1 o superior.

    Nota:Si no conoce SQL Server Compact Edition y tiene inters en saber qu es y cmo funciona esta

    base de datos in process, le recomendamos la lectura del libro de Jos M. Torres tituladoSQL Server 2008 Compact Edition. Aplicaciones smart-client para escritorio y dispositivosmviles, publicado por esta misma editorial.

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    29/30

  • 8/14/2019 Indice Libro Entity Framework Krasis Press

    30/30