martes, 28 de mayo de 2019
Otra característica bastante interesante de Entity Framework Core es que podemos introducir lógica personalizada a la hora de cargar el valor de las propiedades a partir de los datos obtenidos desde el almacén, y viceversa, usando los conversores de valores, o value converters.
Esta capacidad abre posibilidades bastante interesantes,que no eran tan inmediatas (o en algunos casos, ni siquiera posibles de forma directa) en versiones "clásicas" de Entity Framework, o EF Core anterior a 2.1. Gracias a ella podremos, por ejemplo, tener en nuestra entidad una propiedad de tipo enum mapeada a una cadena de caracteres en el almacén de datos, o introducir cualquier lógica de transformación, como podría ser la desencriptación y encriptación de valores, a la hora de leer y persistir información.
Esta capacidad abre posibilidades bastante interesantes,que no eran tan inmediatas (o en algunos casos, ni siquiera posibles de forma directa) en versiones "clásicas" de Entity Framework, o EF Core anterior a 2.1. Gracias a ella podremos, por ejemplo, tener en nuestra entidad una propiedad de tipo enum mapeada a una cadena de caracteres en el almacén de datos, o introducir cualquier lógica de transformación, como podría ser la desencriptación y encriptación de valores, a la hora de leer y persistir información.
lunes, 27 de mayo de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Parámetros opcionales: úsense con precaución
José María Aguilar - ¿Aplicar [Authorize] a todos los controladores MVC de una carpeta?
José María Aguilar
.NET / .NET Core
- Is it better to "!= 0” or ”== mask” when working with enums (C#, RyuJIT)
Jiří Činčura - WinForms - Single-File Applications With .NET Core 3
DevExpress Blogs - Default implementations coming to interfaces with C# 8
Gunnar Peipman - Como instalar un servicio Net Core en Linux
Jorge Turrado - Profiling .NET Core Memory Traffic using JetBrains dotMemory
Steve Gordon - The Uri composition mystery
João Antunes - HttpClient: How to remove charset from Content-Type header
Gunnar Peipman - Making Sense of .NET 5
Bill Reiss - Moving from Node.js to .NET Core
Jim Wang - Be careful of lazy dependencies
Nigel Sampson - Null No More
Simon Timms - Cross-Platform Selenium with DotNet Core
Andy R. Blank - Lying to the compiler
Jon Skeet - Analysing the Large Object Heap in JetBrains dotMemory
Steve Gordon
martes, 21 de mayo de 2019
La palabra clave
Centrándonos en este último caso de uso, seguro que en muchas ocasiones habéis escrito código como el siguiente, donde vamos anidando objetos
using
, utilizada tanto en forma de directiva como de instrucción, es una de las más sobrecargadas del lenguaje C#. Es útil para bastantes cosas, como la importación de espacios de nombres, definición de alias de namespaces o tipos, simplificar el acceso a miembros de tipos estáticos, o para especificar bloques o ámbitos de uso de recursos (objetos IDisposable
) que deben ser liberados automáticamente.Centrándonos en este último caso de uso, seguro que en muchas ocasiones habéis escrito código como el siguiente, donde vamos anidando objetos
IDisposable
para asegurar que al finalizar la ejecución de cada bloque los recursos sean liberados de forma automática:void DoSomething()
{
using(var conn = new SqlConnection(...))
{
connection.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "...";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// ...
}
}
}
}
}
Al final, lo que encontramos es código con un nivel de indentación muy alto, y que resulta muy extenso, básicamente porque una gran parte de las líneas las dedicamos sólo a abrir y cerrar llaves. A la postre, esto sólo hace que nuestro código crezca a lo ancho, lo cual no es bueno desde el punto de vista de la simplicidad y facilidad de lectura.
lunes, 20 de mayo de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Consejos imprescindibles por si algo falla
José María Aguilar - BenchmarkDotNet: Arañando microsegundos en proyectos .NET Core o .NET Framework
José María Aguilar
.NET / .NET Core
- .NET Developer Updates from Build 2019
Sam Basu - Performance Improvements in .NET Core 3.0
Stephen Toub - .NET Core May 2019 Updates - 1.0.16, 1.1.14, 2.1.11 and 2.2.5
Lee Coward - Switch Expressions and Pattern-Based Usings – A Look at New Language Features in C# 8
Matthias Koch - Top 3 Features in C# 8 that will change the way you write code
Chris Pietschmann - .NET Core Global Tools - (What are Global Tools, How to Create and Use them)
Damir Arh - Default implementations in interfaces
Mads Torgersen - Cache Implementations in C# .NET
Michael Shpilt - C# : 6 Cool Language Features That You Rarely Use
Siddharth Patel - Modernize Your C# Code
Florian Rappl - Introducing the Try .NET Global Tool - interactive in-browser documentation and workshop creator
Scott Hanselman - Create Interactive .NET Documentation with Try .NET
Maria Naggaga - Creating Strings with No Allocation Overhead Using String.Create
Steve Gordon
martes, 14 de mayo de 2019
Seguimos viendo características novedosas de Entity Framework Core, y ahora llega el turno a otro detalle interesante si lo que buscamos es proteger nuestras entidades de modificaciones descontroladas y así asegurar en todo momento su consistencia: los constructores parametrizados.
En versiones anteriores a EF Core 2.1 y todos sus antecesores "clásicos", un problema que era difícilmente salvable era la necesidad de que en las entidades existiera un constructor público sin parámetros.
Esto tenía sentido, pues debíamos proporcionar al framework una vía para crear las instancias al materializarlas desde el almacén de datos. De hecho, al materializar, el marco de trabajo usaba dicho constructor para crear la instancia, y luego iba poblando las propiedades una a una utilizando sus setters (o estableciendo el valor de sus backing fields, como vimos en un post anterior)
En versiones anteriores a EF Core 2.1 y todos sus antecesores "clásicos", un problema que era difícilmente salvable era la necesidad de que en las entidades existiera un constructor público sin parámetros.
Esto tenía sentido, pues debíamos proporcionar al framework una vía para crear las instancias al materializarlas desde el almacén de datos. De hecho, al materializar, el marco de trabajo usaba dicho constructor para crear la instancia, y luego iba poblando las propiedades una a una utilizando sus setters (o estableciendo el valor de sus backing fields, como vimos en un post anterior)
lunes, 13 de mayo de 2019
Ahí van los enlaces recopilados durante la semana pasada, con bastantes perlas procedentes del evento Build 2019 que ha tenido lugar en Seattle días atrás. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo adaptarse a la RGPD con ASP.NET Core
José María Aguilar - ¿Esa enumeración está vacía?
José María Aguilar
.NET / .NET Core
- .NET Core is the Future of .NET
Scott Hunter - Introducing .NET 5
Richard Lander - Announcing .NET Core 3.0 Preview 5
Richard Lander - Declarative Coding Approach to Caching in .NET Core with PostSharp
Tugberk Ugurlu - Announcing .NET Core 3.0 Preview 5
Richard Lander - Introducing diagnostics improvements in .NET Core 3.0
Sourabh Shirhatti - Your .NET 5 Questions Answered (Kinda Sorta), Part 1: WCF
David Ramel - NLog: Rules and filters
Ivan Yakimov - Default timeouts in .Net code. What are they if you do not specify?
Chris F Carroll - Automatically Detect Expiring HTTPS SSL Certificates
Steve Smith - Looking back at Some of the Changes in C# 6
George Stocker - Cómo crear un servicio Net Core multiplataforma
Jorge Turrado
ASP.NET / ASP.NET Core
- ASP.NET Core updates in .NET Core 3.0 Preview 5
Brady Gaster - Simple custom authentication with ASP.NET Core
Gunnar Peipman - The backend for frontend and the HttpClient
João Antunes - Consuming a GraphQL API with ASP.NET Core
Marinko Spasojevic - Safely migrating passwords in ASP.NET Core Identity with a custom PasswordHasher
Andrew Lock - Simple Authentication In Razor Pages Without A Database
Mike Brind - Comparing Native Blazor Components
Ed Charbeneau - ASP.NET Core Blazor game development using .Net core 3.0 preview,Web API and Visual Studio 2019
Syed Shanu - Handling Access Tokens for private APIs in ASP.NET Core
Damien Bowden - Assembly version tag helper for ASP.NET Core
Gunnar Peipman
miércoles, 8 de mayo de 2019
La triscaidecafobia es el miedo irracional al número trece, muy asociado a supersticiones y creencias arraigadas en distintas épocas y culturas, como la egipcia, vikinga, el propio cristianismo, o incluso las órdenes templarias. Por contraposición, la triscaidecafilia sería justamente lo contrario: el gusto excesivo por todo lo relacionado con dicho número.
Y hasta aquí la píldora cultural del día, ahora vamos a lo importante :D
Y hasta aquí la píldora cultural del día, ahora vamos a lo importante :D
Publicado por José M. Aguilar a las 8:15 a. m.
Etiquetas: aniversario, autobombo, sponsored, variablenotfound
martes, 7 de mayo de 2019
Para los desarrolladores que hemos utilizado Entity Framework 6.x y anteriores durante años, lo normal es que al dar el salto a Entity Framework Core continuemos utilizando más o menos las mismas cosas que ya conocíamos, y muchas veces no nos detenemos a ver qué novedades interesantes acompañan al nuevo marco de trabajo.
Ya llevamos varios posts dedicados a comentar algunas características novedosas o que cambian bastante respecto a las versiones anteriores (como la evaluación en cliente o las shadow properties, y vamos a continuar en esta línea presentando ahora otra interesante novedad: el soporte para campos de respaldo o backing fields.
Ya llevamos varios posts dedicados a comentar algunas características novedosas o que cambian bastante respecto a las versiones anteriores (como la evaluación en cliente o las shadow properties, y vamos a continuar en esta línea presentando ahora otra interesante novedad: el soporte para campos de respaldo o backing fields.
lunes, 6 de mayo de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Problem Details: una forma estándar de retornar errores desde APIs HTTP (y cómo usarlo desde ASP.NET Core)
José María Aguilar - ¿ActionLink te genera direcciones que acaban en Length=N?
José María Aguilar
.NET / .NET Core
- MediatR 7.0.0 Released
Jimmy Bogard - Cómo crear operadores personalizados para clases propias en C#
Jorge Turrado - Serializing objects to URL encoded form data
Gunnar Peipman - Compare .NET Thread Class, Threadpool Class, BackgroundWorker Class and Task Parallel Library
Artemakis Artemiou - Lessons Learnt: Migrating From Net Framework to Net Core
Michael James - .NET Regex: \d is different from [0-9]
Gérald Barré - Performance Showdown of Producer/Consumer (Job Queues) Implementations in C# .NET
Michael Shpilt - .NET Core 3.0 SDK Projects: Controlling Output Folders and Content
Rick Strahl - PDF417 Barcode Decoder .NET Class Library and Two Demo Apps
Uzi Granot - Pattern Matching in C# 8.0
Filip Ekberg - Throwing Standard Exception Types in .NET
Peter Mbanugo - Async-Async: Consequences for parameters to parallel asynchronous calls & Async-Async: Consequences for exceptions
Raymond Chen