martes, 19 de marzo de 2019
Vamos con un post rapidito, al hilo de una pregunta que planteaba el amigo Javier R. vía el formulario de contacto del blog, sobre el artículo donde veíamos las shadow properties de Entity Framework Core, cuya respuesta creo que puede ser interesante para alguien más.
En concreto, la duda le surgía al combinar las capacidades de data seeding de EF con las propiedades ocultas, y básicamente era:
En concreto, la duda le surgía al combinar las capacidades de data seeding de EF con las propiedades ocultas, y básicamente era:
Dado que las shadow properties no existen en la entidad, ¿cómo podemos establecerlas en el momento del seeding de datos?Bien, aunque no es fácil de descubrir de forma intuitiva, la solución es bastante sencilla. Si nos fijamos en el intellisense del método que utilizamos para el poblado de datos,
HasData()
, podemos observar varias sobrecargas; por ejemplo, en la siguiente captura se puede ver la información mostrada al invocar este método para la entidad Friend
:
lunes, 18 de marzo de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Stack traces asíncronas legibles, de serie en .NET Core 2.1 (¡y también en otros frameworks!)
José María Aguilar - Y todavía otras 101 citas célebres del mundo de la informática
José María Aguilar
.NET / .NET Core
- La Evolución del lenguaje C#
CampusMVP - C# Job Queue Implementations in Depth - Part 1
Michael Shpilt - Parallel workflow with the .NET Task Parallel Library (TPL) DataFlow (C#)
Riccardo Terrell - C#88: The Original C#
Rico Mariani - A Definitive FizzBuzz Solution Guide in C#
Matthew Jones - Using async/await and Task.WhenAll to improve the overall speed of your C# code
Jeremy Lindsay - Handling the orientation EXIF tag in images using C#
Richard Moss - C# 7.2 – Let’s talk about readonly structs
John Demetriou - Comparing .NET Imaging Processing APIs (GcImaging vs. ImageSharp)
Shilpa Sharma - C# Dictionary & GetHashCode() & Equals()
Dr. Song Li - .NET Core Container Images now Published to Microsoft Container Registry
Richard Lander - Challenging the C# StringBuilder
Michael Shpilt - Cómo medir tiempos en .Net (con precisión)
Jorge Turrado
martes, 12 de marzo de 2019
Seguimos hablando de características interesantes de Entity Framework Core, y en esta ocasión nos detendremos en las shadow properties, o propiedades ocultas.
A grandes rasgos, se trata de la capacidad de este framework para gestionar propiedades de una entidad que existen en el almacén datos pero no en la clase .NET que la representa en el mundo de los objetos.
De forma intuitiva podemos saber que esto ya existía en las versiones clásicas de Entity Framework. Por ejemplo, cuando introducíamos una propiedad de navegación entre dos entidades sin usar una clave foránea de forma explícita, el propio marco de trabajo creaba, por convención, una columna en la base de datos para almacenar dicha referencia, como en el siguiente escenario:
Pues bien, Entity Framework Core aporta la capacidad para gestionar este tipo de campos "ocultos" para servir a nuestros propios intereses. De esta forma, podríamos añadir a una entidad propiedades que no tienen por qué estar visibles en la clase .NET en forma de propiedades; un ejemplo podría ser el clásico "IsDeleted" cuando implementamos borrado lógico, o información de auditoría como los tradicionales "UpdatedAt" o "UpdatedBy".
A grandes rasgos, se trata de la capacidad de este framework para gestionar propiedades de una entidad que existen en el almacén datos pero no en la clase .NET que la representa en el mundo de los objetos.
De forma intuitiva podemos saber que esto ya existía en las versiones clásicas de Entity Framework. Por ejemplo, cuando introducíamos una propiedad de navegación entre dos entidades sin usar una clave foránea de forma explícita, el propio marco de trabajo creaba, por convención, una columna en la base de datos para almacenar dicha referencia, como en el siguiente escenario:
public class Friend
{
public int Id { get; set; }
public string Name { get; set; }
// Se crea una columna CountryId en la base de datos,
public Country Country { get; set; } // pero no existe en la entidad.
}
El valor de dicha columna CountryId
no podía ser manipulada de forma directa porque se trataba de información usada internamente para gestionar las relaciones y su valor era obtenido y actualizado de forma transparente para nosotros.Pues bien, Entity Framework Core aporta la capacidad para gestionar este tipo de campos "ocultos" para servir a nuestros propios intereses. De esta forma, podríamos añadir a una entidad propiedades que no tienen por qué estar visibles en la clase .NET en forma de propiedades; un ejemplo podría ser el clásico "IsDeleted" cuando implementamos borrado lógico, o información de auditoría como los tradicionales "UpdatedAt" o "UpdatedBy".
lunes, 11 de marzo de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- El hombre que inventó el Control-Alt-Suprimir
José María Aguilar - Implementando más fácilmente background tasks en ASP.NET Core 2.1 (bueno, y 2.0)
José María Aguilar
.NET / .NET Core
- Announcing .NET Core 3 Preview 3
Richard Lander - Modernize Your C# Code
Florian Rappl - Copying and Cloning Arrays in C#
Peter Mbanugo - Features To Build Better Applications With .NET Core 3
Atman Rathod - Hardware intrinsic in .NET Core 3.0
Fei Peng - Exploring CQRS within the Brighter .NET open source project
Scott Hanselman - await the async Letdown
K. Scott Allen - Some performance tricks with .NET strings
Gérald Barré - Floating-Point Parsing and Formatting improvements in .NET Core 3.0
Tanner Gooding - A Simple and Fast Object Mapper
Muhammad Rehan Saeed - Debugging .NET Builds with the MSBuild Structured Log Viewer
K. Scott Allen - Converting an Excel Worksheet into a JSON document with C# and .NET Core and ExcelDataReader
Scott Hanselman - Using .NET Core 3.0 Dependency Injection and Service Provider with WPF
Marco Minerva - My Favorite dotnet CLI Global Tools
Travis Illig - Serilog vs NLog - Help you pick using this ultimate comparison
Thomas Ardal - Base64 decoding bug that is present in all version of .NET
Dmitry Yakimenko - Worker Service template in .NET Core 3.0
Gunnar Peipman - C# 8 – Introducing Target-typed new expressions – Developers Anonymous
John Demetriou - How to parse string dates with a two digit year and split on the right century in C#
Scott Hanselman - Demystifying HttpClient Internals
Steve Gordon
martes, 5 de marzo de 2019
Blogger invitado
Jorge Turrado
Apasionado de la programación, siempre buscando la manera de mejorar el día a día con el desarrollo de tecnologías .NET. Apasionado de este momento tan cambiante y fabuloso para ser desarrollador C#.Como desarrollador del ecosistema .NET, seguro que alguna vez has usado el gestor de paquetes NuGet (y si aún no lo has hecho, lo acabarás haciendo antes o después, créeme). Esta herramienta permite empaquetar componentes que cumplen una necesidad determinada, ya sea de terceros o internos de nuestra empresa, dejándolos listos para obtenerlos e incluirlos rápidamente en nuestros proyectos sin tener que compilarlos cada vez o almacenarlos en forma de binarios en una enorme carpeta con cientos de librerías.
Su máximo referente es el repositorio público Nuget.org, integrado dentro de Visual Studio y repositorio de facto de .NET Core, aunque también existen repositorios NuGet privados, o incluso puedes crear el tuyo sin ningún problema bajándote el paquete Nuget.Server desde el propio Nuget.org e implementándolo, ¿es poético verdad? 😊).
Ahora que hemos introducido qué es NuGet para quien no lo supiese, tal vez te hayas preguntado cómo es posible crear un paquete NuGet y publicarlo para que otros desarrolladores puedan utilizarlo. Vamos a ver que es algo realmente sencillo.
lunes, 4 de marzo de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Lambdas como árboles de expresión
José María Aguilar - Usar Razor desde una aplicación de consola .NET Core (2 de 2)
José María Aguilar
.NET / .NET Core
- An update to C# versions and C# tooling
Phillip Carter - DateTime.Now: Usage, Examples, Best Practices, and Pitfalls
Carlos Schults - AKS, KeyVault y netcore
Eduard Tomás - How to Create, Use, and Debug .NET application Crash Dumps in 2019
Michael Shpilt - Creating Custom Web Crawler with Dotnet Core using Entity Framework Core
Mehmet Ozkaya - C# 8.0 in-depth: Setup C# 8.0 and .NET Core 3.0
Dix Yan - An Introduction to Optimising Code Using Span
Steve Gordon - WhiteList Proxying with ASP.Net Core
John Reilly - TransientFaultHandling.Core: Retry library for .NET Core/.NET Standard
Dixin Yan - An example of interaction-based testing in C#
Mark Seemann - Runtime analysis and leak detection for Autofac
Nicholas Blumhardt - C# 8 surprising patterns & Discards and underscores & Tuple deconstruction and positional patterns] & Variable declarations and type patterns
Ian Griffiths - AutoMapper Usage Guidelines
Jimmy Bogard - How to port desktop applications to .NET Core 3.0
Olia Gavrysh - Learning about .NET Core futures by poking around at David Fowler's GitHub
Scott Hanselman - Is C# a low-level language?
Matt Warren