using System.Diagnostics.CodeAnalysis; using SQLite; namespace InnovEnergy.App.Backend.Relations; public abstract class Relation<L,R> { [PrimaryKey, AutoIncrement] [Obsolete("Do not use for any business logic")] public Int64 Id { get; set; } [Ignore] protected L Left { get; set; } = default!; [Ignore] protected R Right { get; set; } = default!; protected Boolean Equals(Relation<L, R> other) { return EqualityComparer<L>.Default.Equals(Left, other.Left) && EqualityComparer<R>.Default.Equals(Right, other.Right); } public override Boolean Equals(Object? obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; return obj.GetType() == GetType() && Equals((Relation<L, R>)obj); } [SuppressMessage("ReSharper", "NonReadonlyMemberInGetHashCode")] public override Int32 GetHashCode() => HashCode.Combine(Left, Right); public static Boolean operator ==(Relation<L, R>? left, Relation<L, R>? right) => Equals(left, right); public static Boolean operator !=(Relation<L, R>? left, Relation<L, R>? right) => !Equals(left, right); }