前言:html
本系列文章主要爲我以前所學知識的一次微小的實踐,以我學校圖書館管理系統爲雛形所做。git
本系列文章主要參考資料:github
微軟文檔:https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-2.1&tabs=windows數據庫
《Pro ASP.NET MVC 5》、《鋒利的 jQuery》windows
當此系列文章寫完後會在一週內推出修正版。ui
此係列皆使用 VS2017+C# 做爲開發環境。若是有什麼問題或者意見歡迎在留言區進行留言。 spa
項目 github 地址:https://github.com/NanaseRuri/LibraryDemocode
本章內容:對圖書館系統組成的簡要分析。以及對域模型以及相應數據庫的創建。htm
知識點:EF 多對多關係的創建、控制器以及動做方法的建立blog
1、EF 多對多關係的創建
在上一章中,我假設書架和書籍關係爲多對一的關係,而實際上一本書能夠放在不一樣的書架上,如咱們學校中的兩個圖書館中不一樣的書架,所以須要對現有的模型進行更新。
在 EF 中,若是在兩個模型類中同時使用基於另一方的 ICollection 時會出現異常,由於 EF 沒法肯定它們之間的外鍵關係,所以須要引入一箇中間類:
1 public class BookMiddle 2 { 3 public string BookId { get; set; } 4 public int BookshelfId { get; set; } 5 public Book Book { get; set; } 6 public Bookshelf Bookshelf { get; set; } 7 }
同時對 Book 和 Bookshelf 類進行更改:
1 public class Book 2 { 3 /// <summary> 4 /// 二維碼 5 /// </summary> 6 [Key] 7 public string BarCode { get; set; } 8 9 public string ISBN { get; set; } 10 11 /// <summary> 12 /// 書名 13 /// </summary> 14 [Required] 15 public string Name { get; set; } 16 17 /// <summary> 18 /// 取書號 19 /// </summary> 20 public string FetchBookNumber { get; set; } 21 22 /// <summary> 23 /// 所在書架 24 /// </summary> 25 //public Bookshelf Bookshelf { get; set; } 26 public ICollection<BookMiddle> BookMiddles { get; set; } 27 28 /// <summary> 29 /// 借出時間 30 /// </summary> 31 public DateTime BorrowTime { get; set; } 32 33 /// <summary> 34 /// 到期時間 35 /// </summary> 36 public DateTime MatureTime { get; set; } 37 38 /// <summary> 39 /// 是否續借過 40 /// </summary> 41 public bool Renewed { get; set; } 42 43 /// <summary> 44 /// 持有者,指定外鍵 45 /// </summary> 46 public Student Keeper { get; set; } 47 }
1 public class Bookshelf 2 { 3 /// <summary> 4 /// 書架ID 5 /// </summary> 6 [Key] 7 public int BookshelfId { get; set; } 8 9 /// <summary> 10 /// 書架的書籍類別 11 /// </summary> 12 13 [Required] 14 public string Sort { get; set; } 15 /// <summary> 16 /// 最小取書號 17 /// </summary> 18 [Required] 19 public string MinFetchNumber { get; set; } 20 [Required] 21 public string MaxFetchNumber { get; set; } 22 23 /// <summary> 24 /// 書架位置 25 /// </summary> 26 [Required] 27 public string Location { get; set; } 28 29 /// <summary> 30 /// 所有藏書 31 /// </summary> 32 //public ICollection<Book> Books { get; set; } 33 public ICollection<BookMiddle> BookMiddles { get; set; } 34 }
在 LendingInfoDBContext 添加 BookMiddle 表:
public class LendingInfoDbContext:DbContext { public LendingInfoDbContext(DbContextOptions<LendingInfoDbContext> options) : base(options) { } public DbSet<Book> Books { get; set; } public DbSet<BookDetails> BooksDetail { get; set; } public DbSet<Bookshelf> Bookshelves { get; set; } public DbSet<Student> Students { get; set; } public DbSet<RecommendedBook> RecommendedBooks { get; set; } public DbSet<BookMiddle> BookMiddles { get; set; } }
爲數據庫添加遷移:
add-migration AddBookMiddles -c LibraryDemo.Data.LendingInfoDbContext
更新數據庫:
update-database -c LibraryDemo.Data.LendingInfoDbContext
查看當前數據庫結構:
原文出處:https://www.cnblogs.com/gokoururi/p/10160374.html