From e6d573bb8ef5c7f87409272eb3a994a902c3db95 Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Thu, 24 Oct 2024 08:23:45 +1100 Subject: Fixed bug causing unstable hashcodes to be generated for records --- BartService.cs | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/BartService.cs b/BartService.cs index f54ec55..e3bfac1 100644 --- a/BartService.cs +++ b/BartService.cs @@ -2,6 +2,7 @@ using PagerParser.Bart; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Security.Cryptography; using System.Text.Json; using System.Text.Json.Serialization; @@ -46,16 +47,30 @@ namespace PagerParser.Bart { public DateTime? CreatedOn { get; set; } public BartMember? CreatedBy { get; set; } - public int Hashcode { - get => ( - Timestamp, - Member.BartMemberId, - Status, - IsDefault, - ModifiedOn, - ModifiedBy?.BartMemberId, - CreatedOn, - CreatedBy?.BartMemberId).GetHashCode(); + public Guid Hashcode { + get { + int?[] hashes = [ + Timestamp.GetHashCode(), + Member.BartMemberId.GetHashCode(), + Status.GetHashCode(), + IsDefault.GetHashCode(), + ModifiedOn.GetHashCode(), + ModifiedBy?.BartMemberId.GetHashCode(), + CreatedOn.GetHashCode(), + CreatedBy?.BartMemberId.GetHashCode() + ]; + + var bytes = hashes + .Where(x => x is not null) + .Cast() + .SelectMany(BitConverter.GetBytes) + .ToArray(); + + using var md5 = MD5.Create(); + + return new Guid(md5.ComputeHash(bytes)); + } + set => _ = value; } } -- cgit v1.3