ASP.NET Core 打造一个简单的图书馆管理系统(二)Code First 多对多关系的建立
2018-12-22 11:22
1156 查看
前言:
本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作。
本系列文章主要参考资料:
微软文档: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 无法确定它们之间的外键关系,因此需要引入一个中间类:
public class BookMiddle { public string BookId { get; set; } public int BookshelfId { get; set; } public Book Book { get; set; } public Bookshelf Bookshelf { get; set; } }
同时对 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 打造一个简单的图书馆管理系统(三)基本登录页面以及授权逻辑的建立
- ASP.NET Core 打造一个简单的图书馆管理系统(四)密码修改以及密码重置
- ASP.NET Core 打造一个简单的图书馆管理系统(五)初始化书籍信息
- asp.net core 身份认证/权限管理系统简介及简单案例
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- Asp.Net 简单考题管理系统
- Asp.NET+Oracle? 逐浪CMS致力打造功能强大的新一代网站内核管理系统
- 用ASP.NET实现简单的超市管理系统-登录页面
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之预告篇
- Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端
- ASP.NET Core实战之权限管理系统
- ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- 使用xml+asp.net打造简单的站点导航&管理站点友情链接
- CodeFirst从零开始搭建Asp.Net Core2.0网站
- asp.net一个简单的登陆系统代码
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
- asp.net core 实现一个简单的仓储
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试