2017-04-02 96 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