2017-04-02 94 views
0

我正在处理借贷系统。 我有2张桌子。贷款和工具。一笔贷款可以有更多的工具。数据库设计,one2many,表之间的双向依赖关系

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; } 
} 

我要问这样的问题:

  1. 工具的可用性 - 借/未借。

我通过在工具表中使用LoanId来解决这个问题,检查它是否为null。

  • 历史交易

    在这里,我有一个问题。该icollections似乎只包含Tool table的外键。因此,当我将LoanId设置为空(表示该工具已返回并且可以再次借用)时,我将失去历史记录。 我应该如何解决这个问题。我应该在贷款表中定义另一个外键吗?就像这样:

    // foreign key to Tool 
    public IList<int> ToolId { get; set; } 
    public virtual Tool Tool { get; set; } 
    
  • 好像在国外钥匙给我循环依赖。什么是实现所需功能的正确途径?

    感谢您的任何建议。

    回答

    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财产作出新的贷款或返回一个时。

    +0

    感谢您的快速回复。也许最好使用第三个表...为此。 – user3463614

    +0

    基本上,它必须是多对多的关系,而不是一对多...... – user3463614