前言:
本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作。
本系列文章主要参考资料:
微软文档:https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-2.1&tabs=windows
《Pro ASP.NET MVC 5》、《锋利的 jQuery》
此系列皆使用 VS2017+C# 作为开发环境。如果有什么问题或者意见欢迎在留言区进行留言。
项目 github 地址:https://github.com/NanaseRuri/LibraryDemo
本章内容:对图书馆系统组成的简要分析。以及对域模型以及相应数据库的建立。
知识点:EF 多对多关系的建立、控制器以及动作方法的创建
一、EF 多对多关系的建立
在上一章中,我假设书架和书籍关系为多对一的关系,而实际上一本书可以放在不同的书架上,如我们学校中的两个图书馆中不同的书架,因此需要对现有的模型进行更新。
在 EF 中,如果在两个模型类中同时使用基于另外一方的 ICollection 时会出现异常,因为 EF 无法确定它们之间的外键关系,因此需要引入一个中间类:
1 ????public class BookMiddle2 ????{3 ????????public int BookMiddleId { get; set; }4 ????????public string BookId { get; set; }5 ????????public int BookshelfId { get; set; }6 ????????public Book Book { get; set; }7 ????????public Bookshelf Bookshelf { get; set; }8 ????}
同时对 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
查看当前数据库结构:
ASP.NET Core 打造一个简单的图书馆管理系统(二)Code First 多对多关系的建立
原文地址:https://www.cnblogs.com/gokoururi/p/10031174.html