我正在研究贷款系统。 我有2张桌子。贷款和工具。一笔贷款可以有更多的工具。
public class Loan
{
[Key]
public int LoanId { get; set; }
[Required]
public DateTime WhenBorrowed { get; set; }
public DateTime? WhenReturned { get; set; }
// foreign key to Tool
public virtual ICollection<Tool> Tools { get; set; }
}
public class Tool
{
// Primary key
public int ToolId { get; set; }
[Required]
public string Name { get; set; }
// foreign key to Loan
public int? LoanId { get; set; }
public virtual Loan Loan { get; set; }
}
我想问一些问题:
我通过在Tool表中使用LoanId解决了这个问题,检查它是否为null。
交易历史
这里我有一个问题。 icollections似乎只包含Tool表的外键。因此,当我将LoanId设置为null(表示该工具已返回并且可以再次借用)时,我将丢失历史记录。 我该怎么解决这个问题。我应该在贷款表中定义另一个外键吗?像这样:
// foreign key to Tool
public IList<int> ToolId { get; set; }
public virtual Tool Tool { get; set; }
对我来说外键似乎是循环依赖。实现所需功能的正确方法是什么?
感谢您的任何建议。
答案 0 :(得分:1)
贷款模式:
public class Loan
{
[Key]
public int LoanId { get; set; }
[Required]
public DateTime WhenBorrowed { get; set; }
public DateTime? WhenReturned { get; set; }
// foreign key to Tool
public virtual ICollection<LoanHistory> History { get; set; }
}
LoanHistory模型:
public class LoanHistory
{
// foreign key to Tool
public int ToolId { get; set; }
public virtual Tool { get; set; }
// foreign key to Loan
public int LoanId { get; set; }
public virtual Loan Loan { get; set; }
}
工具模型:
public class Tool
{
// Primary key
public int ToolId { get; set; }
[Required]
public string Name { get; set; }
public bool IsAvailable { get; set; }
}
这样可以保留贷款历史记录。
简单地检查工具:
var AvailableTools = db.Tools
.Where(p => p.IsAvailable == true)
.ToList();
还值得一提的是,您需要在新贷款或退款时更新工具IsAvailable
属性。