Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
Mostrando entradas con la etiqueta entity framework. Mostrar todas las entradas
Mostrando entradas con la etiqueta entity framework. Mostrar todas las entradas
martes, 26 de enero de 2021
Entity Framework Core

El desarrollo de EF6.TagWith lo comencé hace algo más de un año, cuando escribía para el blog lo interesante que me parecía el extensor TagWith() de Entity Framework Core y me preguntaba por qué no existía algo similar para Entity Framework 6.x.

Como recordaréis, la idea era traer a EF "clásico" la posibilidad de añadir a consultas realizadas desde C# un comentario o etiqueta que después podría ser fácilmente visible en trazas, como las proporcionadas por SQL Server Profiler o herramientas de análisis de rendimiento.

No pensé que existieran muchos desarrolladores a los que pudiera interesar, pero con el tiempo esto me ha servido para confirmar que cualquier aportación a la comunidad, por pequeña que sea, puede ayudar a un buen número de personas.

A día de hoy, y por increíble que parezca, este pequeño y humilde paquetito ha sido instalado más de 6.000 veces, con una media de 10 descargas al día, y ha recibido issues y pull requests de desarrolladores que han decidido contribuir a su mejora a través del sitio del proyecto en GitHub. Impresionante.

Pues bien, por fin he podido dedicar un rato a actualizarlo y he publicado su versión 1.2.1. Esta revisión soluciona algunos errores menores y problemas de compatibilidad con proyectos .NET Framework 4.5, además de incluir un par de novedades fruto del feedback recibido de sus usuarios, que describimos a continuación.

martes, 25 de junio de 2019
Entity Framework Pues hablábamos hace unos días del extensor TagWith() de Entity Framework Core que, como recordaréis, venía de perlas para incluir un comentario en las consultas SQL enviadas al servidor de datos para poder identificarlas a posteriori:
LINQ
============================================
var query = context.Friends
    .OrderByDescending(friend => friend.Age)
    .Take(10)
    .Select(friend =>
        new { FriendName = friend.Name, 
              friend.Age, 
              CountryName = friend.Country.Name 
     })
    .TagWith("Get top 10 older friends with country");

Generated SQL
============================================
-- Get top 10 older friends with country

SELECT TOP(@__p_0) [friend].[Name] AS [FriendName], [friend].[Age], 
                   [friend.Country].[Name] AS [CountryName]
FROM [Friends] AS [friend]
LEFT JOIN [Countries] AS [friend.Country] 
     ON [friend].[CountryId] = [friend.Country].[Id]
ORDER BY [friend].[Age] DESC
Mientras escribía el post, pensaba que quizás sería interesante poder utilizar esta misma idea en Entity Framework 6, porque, al fin y al cabo, todos tenemos por ahí muchas aplicaciones en producción que continúan delegando en este marco de trabajo su acceso a datos. Tras una búsqueda en Google y no encontrar gran cosa, pensé que tampoco sería tan difícil de implementar algo que diera el apaño...
TL;DR: Echad un vistazo a EF6.TagWith en NuGet o en el repo de GitHub.
miércoles, 20 de enero de 2016
ASP.NET 5 se llama ahora ASP.NET CoreCuando aún todos conocíamos el nuevo framework de desarrollo para la web con el nombre "ASP.NET vNext" y llegó el momento de darle un nombre definitivo, hubo bastante discusión al respecto. Internamente se debatió bastante, se propusieron varias alternativas y al final se optó por la línea continuista: la nueva criatura se llamaría "ASP.NET 5".

Este mismo criterio se aplicó a otros productos que también habían sido creados from scratch, como .NET Core, que se versionó como 5.0, o el nuevo Entity Framework, cuya flamante primera versión sería la 7.0.

La cuestión es que este enfoque en la asignación de nombres y versiones no fue del agrado de muchos, que pensábamos que algo creado desde cero y que rompía en bastantes aspectos con lo anterior no tenía sentido lanzarlo a la calle simplemente como un incremento de versión de un producto existente. Es difícil de explicar y difícil de comprender.

Pues bien, hace unas horas recibíamos el comunicado oficial de que ASP.NET 5 ha cambiado su nombre por ASP.NET Core.
martes, 21 de mayo de 2013
Sabemos que el uso descontrolado de la carga diferida o lazy loading puede echar abajo el rendimiento de nuestra aplicación, puesto que se generan peticiones al motor de datos al intentar recuperar entidades relacionadas cuando intentamos acceder a ellas. Sin embargo, no son pocos los casos en los que me encuentro que no se está usando apropiadamente, provocando un rendimiento terrible en el acceso a datos de las aplicaciones.
martes, 26 de junio de 2012
Modelo extenso de EF (tomado de http://mattduffield.wordpress.com/2011/06/23/working-with-large-entity-framework-models-in-visual-studio/)Los que hayáis tratado con modelos extensos en Entity Framework seguro que habéis sufrido bastante con Visual Studio 2010, puesto que las entidades y relaciones las representábamos obligatoriamente en un único diagrama y esto dificultaba enormemente su legibilidad y mantenimiento.
martes, 11 de enero de 2011
Uno de los libros que recuerdo haber leído con más entusiasmo en los últimos años fue el primero de Krasis Press sobre Entity Framework (bueno, y de hecho era el primero a nivel mundial por entonces en tratar este tema). Ya entonces comenté por aquí lo que me pareció, una lectura de lo más recomendable para sumergirse en esta tecnología.

ADO.NET Entity Framework 4.0. Aplicaciones y servicios centrados en datosPor esta razón esperaba impaciente la actualización del mismo a la versión 4 de Entity Framework, que durante estas navidades he tenido oportunidad de devorar. Y de nuevo de la mano de un figura como Unai Zorrilla y sus colaboradores (Yamil Herández, César de la Torre y Pablo Peláez), he disfrutado de lo lindo.

Lo primero que me ha llamado la atención es que, aunque se podía esperar lo contrario, se trata de un libro nuevo. Es decir, no es el anterior con ligeras indicaciones sobre los cambios introducidos en la última versión del marco de entidades, sino que ha sido reescrito integrando en sus contenidos las novedades, lo que hace su lectura más natural, y sobre todo para los que aún no han trabajado con esta tecnología o no leyeron el libro anterior.

Eso sí, como introduce José Manuel Alarcón (director de Krasis y MVP en ASP.NET) en su prólogo, “no se trata de un libro de recetillas”; en él encontraremos desde trucos y aspectos eminentemente prácticos hasta fundamentos del funcionamiento interno de la tecnología que nos permitirán tener un mayor control sobre ella.

Tampoco es un libro para principiantes: tanto la temática como la forma de tratarla hacen necesario que el lector disponga de ciertos conocimientos sobre bases de datos, programación orientada a objetos, arquitecturas y lenguajes de programación para la plataforma .NET.

El contenido está estructurado en cinco capítulos principales:
  • El primer capítulo nos introduce en el concepto de modelos de dominio, y presenta Entity Framework y sus distintos componentes.
  • A continuación se profundiza en el Entity Data Model y el diseño de modelos, desde mapeos básicos hasta conceptos algo más avanzados, como la herencia, table splitting, o las model defined functions.
  • El tercer capítulo nos presentará Entity Client, el proveedor de datos ADO.NET específico para trabajar con modelos conceptuales, y nos mostrará cómo trabajar directamente con él para consultar información.
  • Seguidamente, ascendemos un nivel más en las capas de abstracciones que Entity Framework establece sobre el almacén de datos, pasando a estudiar Object Services y LINQ to Entities, que de forma conjunta nos ofrecen ya las funcionalidades que nos permiten trabajar directamente con objetos del modelo, abstrayéndonos del motor subyacente a la hora de consultar y actualizar información. En este capítulo se describen además temas tan interesantes como las entidades self-tracking (STE) y POCO.
  • En el capítulo 5, llamado “EF 4.0 en el mundo real”, los autores desarrollan un completo escenario donde demuestran las posibilidades de uso de este marco de trabajo en sistemas n-layer, describiendo paso a paso cómo crear los distintos componentes que entran en juego.
Y adicionalmente se incluyen otros tantos anexos:
  • Fundamentos de LINQ, que nos permite conocer y familiarizarnos con el lenguaje integrado de consultas.
  • Referencia de eSQL (Entity SQL), el lenguaje de consultas de Entity Client.
  • Notas sobre el rendimiento de Entity Framework, con consejos y recomendaciones para hacer el acceso a datos de nuestras aplicaciones más eficiente.
  • Plantillas T4, donde se realiza una introducción a la creación de plantillas de este tipo.
  • Referencia de uso de la herramienta de línea de comandos edmgen.exe.
En definitiva se trata de un libro completo, que toca prácticamente todos los puntos necesarios para introducirnos de lleno en el mundo de Entity Framework 4, tanto si anteriormente hemos trabajado con esta tecnología como si lo que pretendemos es iniciarnos en ella.

El libro puede adquirirse directamente en la tienda online de Krasis, en formato papel y PDF. Además, desde esa misma página es posible descargar el código de los ejemplos del libro, y acceder al índice y primer capítulo en Scribd, por si queréis echarle un vistazo.

Ah, y como interesante complemento si queréis estar a la última, no os perdáis la serie de posts del autor, Unai, sobre Code-First, una extensión de Entity Framework (actualmente aún en pruebas) que permite crear bases de datos a partir del código, sin necesidad de usar los diseñadores de Visual Studio.

Publicado en: Variable not found.
martes, 21 de septiembre de 2010
Este es un error que me ha hecho perder un buen rato mientras trabajaba con objetos POCO en Entity Framework 4, y espero que pueda ayudar a alguien que se encuentre con el mismo problema.

El tema comienza con el lanzamiento de una excepción  InvalidOperationException justo en el momento de crear un ObjectSet<T> , como en el siguiente código:

class MiContexto : ObjectContext
{
    ...
    private ObjectSet<Cliente> clientes;
    public ObjectSet<Cliente> Clientes
    {
        get
        {
            return clientes ??
                    (clientes = CreateObjectSet<Cliente>());
        }
    }
}

Hay ocasiones en las que la excepción lanzada al crear el  ObjectSet es de tipo MetadataException, y contiene información suficiente para detectar el error, por lo que es sencillo dar con la solución.

Sin embargo, este InvalidOperationException y el texto que la acompaña (no se encontró la información de metadatos y asignaciones para EntityType 'Namespace.Entidad') son bastante confusos. De hecho, supongo que al ver esta descripción lo normal es que ponerse como loco a destripar el EDM para ver a dónde se ha ido la información de metadatos y asignaciones, a cambiar los namespaces… y por supuesto, todo en vano.

Tras un buen rato de infructuosa investigación, acudí a Google, ese que todo lo sabe, y encontré la primera recomendación si esto te ocurre: revisa minuciosamente la definición de tus entidades POCO. Éstas deben coincidir exactamente con la definición del modelo conceptual, tanto en sus propiedades escalares, de tipos complejos y las propiedades de navegación.

Y el "minucionamente" no sobra. En mi caso había definido de forma incorrecta una propiedad de navegación, y por más que repasaba no veía ningún error; obviamente, desconfié de la recomendación que había encontrado, y me puse de nuevo a buscar la solución por mi cuenta: seguí escudriñando el EDM, regenerándolo, eliminando entidades que no usaba, modificándolas... para nada, claro.

Al final, la moraleja de esta historia es la siguiente: aunque pienses que tus entidades son correctas, vuelve a revisarlas, que fijo que algo te estás dejando por detrás.

Espero que, a diferencia de uno que yo me sé ;-), esta tontería no os haga perder mucho tiempo.

Publicado en: Variable not found.
domingo, 2 de noviembre de 2008
Como muchos otros desarrolladores, soy un sufridor del chirriar entre los modelos relacionales y de objetos (desajuste de impedancias lo llaman otros ;-)). Y dado que principalmente me dedico a la construcción de software centrado en datos, estoy especialmente sensibilizado con el tema ;-).

Conozco sistemas ORM, y en especial NHibernate, que ayudan a aliviar en gran parte esta falta de concordancia, por lo que estaba deseando ver la gran apuesta de Microsoft en este ámbito, máxime después de juguetear con su hermano pequeño, y quizás ya difunto, Linq to SQL, y ver que se quedaba bastante corto en muchos aspectos.

El libro "ADO.NET Entity Framework. Aplicaciones y servicios centrados en datos" publicado por Krasis Press hace algo más de un mes, me ha parecido una lectura muy recomendable para acercarse a esta nueva tecnología de la mano de fenónemos como Unai Zorrilla, Octavio Hernández y Eduardo Quintás.

Comienza con una breve introducción en la que se explica la necesidad de tecnologías que ayuden a salvar la distancia entre el mundo relacional de las bases de datos y el mundo más conceptual, presentado como modelos de clases a nivel de diseño software, ofreciendo seguidamente una descripción general de este nuevo marco de trabajo. A partir de ahí, va profundizando en los distintos componentes de Entity Framework, siempre de forma muy práctica y basándose en ejemplos bastante cercanos a la realidad. Se recogen, entre otros, los siguientes contenidos:
  • Creación de modelos conceptuales, usando tanto los diseñadores de Visual Studio como modificando a mano los archivos XML que describen el modelo, útil para acceder a características no soportadas por el IDE.

  • Entity Client, el proveedor ADO.NET para acceso, aunque algo rudimentario, a datos del modelo

  • eSQL, el lenguaje de consulta de Entity Framework.

  • Implementación de consultas con ObjectQuery<T> y Linq to Entities.

  • Mecanismos de actualización de datos, incluyendo las técnicas de seguimiento de cambios en objetos, transaccionalidad y concurrencia, entre otros aspectos.

  • Ejemplos de uso de Entity Framework con WCF, enlaces a datos desde controles Windows Forms, WPF o ASP.NET.

  • Servicios de datos de ADO.NET, el mecanismo de publicación de modelos de Entity Framework a través de HTTP.

En definitiva, se trata en mi opinión de un libro muy claro y didáctico, recomendable para desarrolladores que quieran obtener un buen nivel de conocimiento de esta nueva tecnología partiendo desde cero, y para tener siempre a mano cuando comencemos a practicar y utilizar Entity Framework.

Desde la web de la editorial se puede descargar el índice y varias páginas de la introducción en PDF, lo que os permitirá echarle un vistazo, así como realizar el pedido online.

Publicado en: www.variablenotfound.com.