diff --git a/nHIbernate/Reports/Report.cs b/nHIbernate/Reports/Report.cs index 5a64618..b13149e 100644 --- a/nHIbernate/Reports/Report.cs +++ b/nHIbernate/Reports/Report.cs @@ -13,10 +13,15 @@ namespace FirmTracker_Server.nHibernate.Reports public virtual decimal TotalExpenses { get; set; } public virtual decimal TotalBalance { get; set; } - public virtual IList ReportTransactions { get; set; } = new List(); + /*public virtual IList ReportTransactions { get; set; } = new List(); public virtual IList ReportExpenses { get; set; } = new List(); + public Report() + { + ReportTransactions = new List(); + ReportExpenses = new List(); + }*/ public class DateRangeDto diff --git a/nHIbernate/Reports/ReportMapping.cs b/nHIbernate/Reports/ReportMapping.cs index 2f01038..00c6e54 100644 --- a/nHIbernate/Reports/ReportMapping.cs +++ b/nHIbernate/Reports/ReportMapping.cs @@ -13,13 +13,15 @@ namespace FirmTracker_Server.nHibernate.Reports Map(x => x.TotalExpenses); Map(x => x.TotalBalance); - HasMany(x => x.ReportTransactions) - .Cascade.All() - .Inverse(); + /*HasMany(x => x.ReportTransactions) + .KeyColumn("ReportId") + .Cascade.AllDeleteOrphan() + .Inverse(); HasMany(x => x.ReportExpenses) - .Cascade.All() - .Inverse(); + .KeyColumn("ReportId") + .Cascade.AllDeleteOrphan() + .Inverse();*/ } diff --git a/nHibernate/Reports/ReportExpense.cs b/nHibernate/Reports/ReportExpense.cs index 39e0f5a..6913b38 100644 --- a/nHibernate/Reports/ReportExpense.cs +++ b/nHibernate/Reports/ReportExpense.cs @@ -4,22 +4,32 @@ namespace FirmTracker_Server.nHibernate.Reports { public class ReportExpense { - public virtual int Id { get; set; } - public virtual int ReportId { get; set; } - public virtual int ExpenseId { get; set; } + //public virtual int Id { get; set; } + public virtual Report Report { get; set; } + public virtual Expense Expense { get; set; } public override bool Equals(object obj) { if (obj == null || GetType() != obj.GetType()) + { return false; + } var other = (ReportExpense)obj; - return ReportId == other.ReportId && ExpenseId == other.ExpenseId; + return Report != null && Expense != null && + Report.Id == other.Report.Id && + Expense.Id == other.Expense.Id; } public override int GetHashCode() { - return HashCode.Combine(ReportId, ExpenseId); + unchecked // Overflow is fine, just wrap + { + int hash = 17; + hash = hash * 23 + (Report?.Id.GetHashCode() ?? 0); + hash = hash * 23 + (Expense?.Id.GetHashCode() ?? 0); + return hash; + } } } diff --git a/nHibernate/Reports/ReportExpenseMapping.cs b/nHibernate/Reports/ReportExpenseMapping.cs index 052064a..0eae317 100644 --- a/nHibernate/Reports/ReportExpenseMapping.cs +++ b/nHibernate/Reports/ReportExpenseMapping.cs @@ -7,9 +7,9 @@ namespace FirmTracker_Server.nHibernate.Reports public ReportExpenseMapping() { Table("ReportExpenses"); - Id(x => x.Id); - References(x => x.ReportId, "ReportId"); - References(x => x.ExpenseId, "ExpenseId"); + CompositeId() + .KeyReference(x => x.Report, "ReportId") + .KeyReference(x => x.Expense, "ExpenseId"); } } } diff --git a/nHibernate/Reports/ReportTransaction.cs b/nHibernate/Reports/ReportTransaction.cs index 51d2d6c..5fc5efd 100644 --- a/nHibernate/Reports/ReportTransaction.cs +++ b/nHibernate/Reports/ReportTransaction.cs @@ -4,22 +4,32 @@ namespace FirmTracker_Server.nHibernate.Reports { public class ReportTransaction { - public virtual int Id { get; set; } - public virtual int ReportId { get; set; } - public virtual int TransactionId { get; set; } + //public virtual int Id { get; set; } + public virtual Report Report { get; set; } + public virtual Transaction Transaction { get; set; } public override bool Equals(object obj) { if (obj == null || GetType() != obj.GetType()) + { return false; + } var other = (ReportTransaction)obj; - return ReportId == other.ReportId && TransactionId == other.TransactionId; + return Report != null && Transaction != null && + Report.Id == other.Report.Id && + Transaction.Id == other.Transaction.Id; } public override int GetHashCode() { - return HashCode.Combine(ReportId, TransactionId); + unchecked // Overflow is fine, just wrap + { + int hash = 17; + hash = hash * 23 + (Report?.Id.GetHashCode() ?? 0); + hash = hash * 23 + (Transaction?.Id.GetHashCode() ?? 0); + return hash; + } } } diff --git a/nHibernate/Reports/ReportTransactionMapping.cs b/nHibernate/Reports/ReportTransactionMapping.cs index e872b4c..6ed68e0 100644 --- a/nHibernate/Reports/ReportTransactionMapping.cs +++ b/nHibernate/Reports/ReportTransactionMapping.cs @@ -4,12 +4,12 @@ namespace FirmTracker_Server.nHibernate.Reports { public class ReportTransactionMapping : ClassMap { - public ReportTransactionMapping() + public ReportTransactionMapping() { Table("ReportTransactions"); - Id(x => x.Id); - References(x => x.ReportId, "ReportId"); - References(x => x.TransactionId, "TransactionId"); + CompositeId() + .KeyReference(x => x.Report, "ReportId") + .KeyReference(x => x.Transaction, "TransactionId"); } } }