我是EF的新手并且有一个非常基本的问题。有人可以使用Code First方法建议如何实现以下场景吗?
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 :(得分: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;}
}
您对User表已有正确的想法。只需建立连接,你就可以了。
您正在寻找的是一对多的关系。有关详细信息,请参阅此页面: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.
}