2015-10-31 77 views
1

我是EF新手,有一個非常基本的問題。有人可以請建議如何使用代碼優先方法實施下面的情況?實體框架中具有其他屬性的一對多

public class Book 
    { 
     public int Id {get; set;} 
     public string title {get; set;} 
     public string author {get; set;} 
     public DateTime DateBorrowed {get; set;} 
     public DateTime DateReturned {get; set;} 

     public virtual User Borrower {get;set;} 
    } 
    public class User 
    { 
     public int Id {get;set;} 
     public string UserName {get;set;} 
     public string Email {get; set;} 

     public virtual ICollection<Book> Books {get; set;} 
    } 

我想保持Book和User類/基礎表每次都保持一個唯一的記錄集合。換句話說,我們如何將單獨的類中的DateBorrowed和DateReturned屬性分開,以便借書和返回事務將保存在單獨的SQL表中。

回答

0

當前的設置將只允許每本書都有一個關於借閱時間和返回時間的記錄。每次借用或返回時,它都會覆蓋最後一個。你可能想要做的更多的是創建一個擁有兩個日期的類,然後在Book表中引用該類作爲外鍵。

您當前的表可以這樣修改(代碼未測試):

public class Book 
{ 
    public int BookId {get; set;} 
    public string title {get; set;} 
    public string author {get; set;} 

    public virtual ICollection<BorrowingRecord> BorrowingRecords { get; set; } 

    public int UserId { get; set; } 
    public virtual User Borrower {get;set;} 
} 

public class BorrwingRecord 
{ 
    public int BorrowingRecordId {get; set; } 
    public DateTime DateBorrowed {get; set;} 
    public DateTime DateReturned {get; set;} 

    public int BookId { get; set; } 
    public virtual Book Book { get; set; } 
} 

public class User 
{ 
    public int UserId {get;set;} 
    public string UserName {get;set;} 
    public string Email {get; set;} 

    public virtual ICollection<Book> Books {get; set;} 
} 

你已經有你的用戶表中的正確的想法。只要建立連接,你就可以走了。

您正在尋找的是一對多的關係。有關詳細信息,請參閱此頁:https://msdn.microsoft.com/en-us/data/jj713564.aspx

下面是一個示例,說明如何獲取特定用戶借閱的書籍以及這些書籍的借閱記錄(代碼未經過測試,並假定您已設置了上下文) :

var booksForUser = context.Books.Where(b => b.UserId == GivenUserID); 

foreach(var book in booksForUser) 
{ 
    var borrowingRecordForBook = context.BorrowingRecords.Where(br => br.BookId == book.BookId); 

    // do what you need with this data. 
} 
+0

嗨尼古拉斯,感謝您的快速反應。但是,如果能夠定義User類和BorrowingRecord類之間的關係以獲取關於分配給特定用戶的借閱/退回書籍的詳細信息,請給我建議並告訴我代碼(如果可能) –

+0

@ramsudheer編輯我的答案來糾正邏輯。之前有過這樣的嫌疑。要獲取用戶的借閱記錄,請獲取該用戶擁有的圖書並獲取每本圖書的借閱記錄。按照我提供的鏈接,它有詳細信息。您應該閱讀以下教程:https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for -an-asp-net-mvc-應用程序和鏈接到答案中的文檔。 –

+1

太棒了。現在我懂了。非常感謝您的快速回復。 –