Modifier le type de données des clés primaires dans ASP.NET Core Identity

Par défaut, toutes les clés primaires dans ASP.NET Core Identity sont des chaînes de caractères; pour être plus précis, il s'agit de Guid convertis en chaînes de caractères. Comme le signale Rick Anderson sur plusieurs échanges concernant ce sujet, cela s'explique parfaitement par le fait que Microsoft ne veut pas s'imiscer dans la logique métier des applications, or une chaîne de caractères est un champs très faiblement typé. Que les identifiants uniques des objets d'une application soient des nombres entier, ou d'un autre type de données ne les regarde pas.

Cela dit, beaucoup d'applications utilisent plutôt des nombres entiers ou des Guid pour leurs clés primaires, et par soucis de simplicité, de confort d'écriture et par soucis de cohérence, on aime aligner Identity sur ce comportement. Si cela pouvait être légèrement lourd sur les précédentes versions d'Identity, cette manipulation est devenue très simple à mettre en place sur la dernière version.

Voilà comment s'y prendre :


Si ces modifications n'impactent pas le modèle de base de données, les clés primaires restant de type nvarchar(450), les identifiants des objets user et role au sein de l'application seront bien du type demandé, vous évitant ainsi de les caster à chaque utlisation :


[HttpGet]
public async Task<IActionResult> Test()
{
    ApplicationUser user = await _userManager.GetUserAsync(HttpContext.User);
    Guid userId = user.Id; // Aucun cast ici, il s'agit bien d'un guid
    throw new NotImplementedException();
}
posté le 16/10/2016
  • ASP.NET Core
  • Identity