ASP.NETCoreMVC打造一个简单的图书馆管理系统(修正版)(一)基本模型以及数据库的建立NanaseRuri

《ProASP.NETMVC5》、《锋利的jQuery》

此系列皆使用VS2017+C#作为开发环境。如果有什么问题或者意见欢迎在留言区进行留言。

本章内容:对图书馆系统组成的简要分析。以及对域模型以及相应数据库的建立。

知识点:CodeFirst、EF基本使用方法、ASP.NETCore使用EFCore的配置方法、EF多对多关系的建立、取消int主键自动增长。

一、对图书馆系统域模型的分析

一个图书馆系统需要有管理员、学生、书架以及书籍

域模型,即用来存储数据的模型。

在此域模型可以用以下结构创建:

二、项目结构

然后就可以开始建立该项目了:

三、建立域模型

学位枚举:

1publicenumDegrees2{3[Display(Name="本科生")]4CollegeStudent,5[Display(Name="研究生")]6Postgraduate,7[Display(Name="博士生")]8DoctorateDegree9}

图书借阅状态枚举:

1publicenumBookState2{3///

4///可借阅5///6[Display(Name="正常")]7Normal,89///10///馆内阅览11///12[Display(Name="馆内阅览")]13Readonly,1415///16///已借出17///18[Display(Name="已借出")]19Borrowed,2021///22///被续借23///24[Display(Name="被续借")]25ReBorrowed,2627///28///被预约29///30[Display(Name="被预约")]31Appointed,3233[Display(Name="过期")]34Expired35}

该项目准备使用一个数据库存储学生账户信息,另一个则用于存储学生借书信息:

学生账户信息:

1publicclassStudent:IdentityUser2{3///

4///学号5///6[ProtectedPersonalData]7[RegularExpression("[UIA]\\d{9}")]8[Display(Name="学号")]9publicoverridestringUserName{get;set;}1011[Display(Name="手机号")]12[StringLength(14,MinimumLength=11)]13publicoverridestringPhoneNumber{get;set;}1415[Display(Name="姓名")]16publicstringName{get;set;}17[Display(Name="学历")]18publicDegreesDegree{get;set;}19[Display(Name="最大借书数目")]20publicintMaxBooksNumber{get;set;}21}

书籍信息:

书架信息:

由于EF会自动将int类型的主键设置为自动增长,因此自定义Bookshelf的ID在插入数据库时会报错,在此需添加修饰[DatabaseGenerated(DatabaseGeneratedOption.None)]告知ef取消该设置:

1publicclassBookshelf2{3///

4///书架ID5///6[Key]7//不自动增长8[DatabaseGenerated(DatabaseGeneratedOption.None)]9publicintBookshelfId{get;set;}1011///12///书架的书籍类别13///1415[Required]16publicstringSort{get;set;}17///18///最小取书号19///20[Required]21publicstringMinFetchNumber{get;set;}22[Required]23publicstringMaxFetchNumber{get;set;}2425///26///书架位置27///28[Required]29publicstringLocation{get;set;}3031///32///全部藏书33///34publicICollectionBooks{get;set;}35}

由于一个学生可以借阅多本书籍,一本书籍可被多人预约,因此书籍和学生具有多对多的关系,在此引入中间类:

其中的AppointingDateTime用来区分中间类包含的书籍是借阅书籍还是预约书籍:

1publicclassAppointmentOrLending2{3publicBookBook{get;set;}4publicstringBookId{get;set;}5publicStudentInfoStudent{get;set;}6publicstringStudentId{get;set;}7publicDateTimeAppointingDateTime{get;set;}8}

学生借书信息:

在EF中多对多关系实际上是两个多对一关系。此处ICollection的属性成为导航属性,用来提示EFStudentInfo和AppointmentOrLending之间存在着多对一的关系。

1publicclassStudentInfo2{3[Key]4publicstringUserName{get;set;}56[Required]7publicstringName{get;set;}89///

10///学位,用来限制借书数目11///12[Required]13publicDegreesDegree{get;set;}1415///16///最大借书数目17///18[Required]19publicintMaxBooksNumber{get;set;}2021///22///已借图书23///24publicICollectionKeepingBooks{get;set;}2526publicstringAppointingBookBarCode{get;set;}2728[StringLength(14,MinimumLength=11)]29publicstringPhoneNumber{get;set;}3031///32///罚款33///34publicdecimalFine{get;set;}35}

外借/阅览书籍信息:

在约定中,若不指定主键,则EF会使用(类名)+ID的方式指定或创建主键,在此使用[Key]指定主键,使用[Required]指定字段为必须,这种可以为属性添加在数据库中的约束或者在视图中的约束的修饰称为DataAnnotations。

此处ICollection的属性成为导航属性,用来提示EFBook和AppointmentOrLending之间存在着多对一的关系。

四、创建DbContext

学生账户信息数据库:

1publicclassStudentIdentityDbContext:IdentityDbContext2{3publicStudentIdentityDbContext(DbContextOptionsoptions):base(options)4{5}6}

借阅信息数据库:

为了使StudentInfo类的UserName和Book的BarCode共同作为AppointmentOrLending中间类的主键,需覆写OnModelCreating方法:

至此StudentInfo和Book的多对多关系正式确立。

1publicclassLendingInfoDbContext:DbContext2{3publicLendingInfoDbContext(DbContextOptionsoptions):base(options)4{5}67publicDbSetBooks{get;set;}8publicDbSetBooksDetail{get;set;}9publicDbSetBookshelves{get;set;}10publicDbSetRecommendedBooks{get;set;}11publicDbSetStudents{get;set;}12publicDbSetAppointmentOrLendings{get;set;}1314protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder)15{16base.OnModelCreating(modelBuilder);17modelBuilder.Entity()18.HasKey(c=>new{c.BookId,c.StudentId});19}20}于是Book和StudentInfo之间的多对多关系确立完成。

五、根据约定配置数据库,进行依赖注入

在appsettings.json中添加数据库连接字符串。

1{2"ConnectionStrings":{3"LendingInfoDbContext":"Server=(localdb)\\mssqllocaldb;Database=LendingInfoDbContext;Trusted_Connection=True;MultipleActiveResultSets=true",4"StudentIdentityDbContext":"Server=(localdb)\\mssqllocaldb;Database=StudentIdentityDbContext;Trusted_Connection=True;MultipleActiveResultSets=true"5},6"Logging":{7"LogLevel":{8"Default":"Warning"9}10},11"AllowedHosts":"*"12}

在Startup.cs中的ConfigureServices方法中对数据库进行配置:

1services.AddDbContext(options=>2{3options.UseSqlServer(Configuration.GetConnectionString("LendingInfoDbContext"));4});5services.AddDbContext(options=>6{7options.UseSqlServer(Configuration.GetConnectionString("StudentIdentityDbContext"));8});

六、数据库的迁移、创建及更新

然后在pm控制台中添加迁移:

添加迁移的语法为add-migration<迁移类名>-c<具体DbContext名>

运行add-migration命令会创建Migrations文件夹以及相应的迁移快照:

在创建迁移时,EF会自动为我们创建或更新对应DbContext的快照,即其中后缀为Snapshot的类。其中会包含当前对应的DbCOntext的结构,并会以代码保留相应的约束,如LendingInfoDbContextModelSnapshot类:

生成的迁移类LendingInfo和Account类则有两个方法——用于更新数据库的Up方法和用以回溯数据库的Down方法,可以在这两个方法或者在快照的BuildModel方法中使用FluentAPI对数据库做进一步的改动,并且通过对FluentAPI的使用可以使我们的类少用DataAnnotations以保证类的整洁。

需要注意的是,生成的迁移类中的Up和Down方法是根据生成迁移之前的数据库快照生成的,如我在之后为LendingInfoDbContext添加DbSet时,在以上的基础上运行了add-migrationAddRecommendedBook-cLibraryDemo.Data.LendingInfoDbContext,生成的Up方法只包括添加表RecommendedBooks的行为,而Down方法只包括删除表RecommendedBooks的行为。

随后在pm控制台执行以下创建或更新数据库:

1update-database-cLibraryDemo.Data.LendingInfoDbContext2update-database-cLibraryDemo.Data.StudentIdentityDbContext

最后在SQLserver对象管理器中可以看见创建的数据库以及对应的表:

至此域模型创建工作完成。

补充:

使用命令行对数据库进行迁移及更新有两种方式:

1dotnetefmigrationsmigrationName-cTargetContext2dotnetefdatabaseupdate-cTargetContext

1add-migrationmigrationName-cTargetContext2update-Database-cTargetContext

windows命令行命令不区分大小写,其中migrationName为迁移类名,最好提供有意义的命名;而TargetContext为目标DbContext类名,需要使用带有命名空间的完全命名。

THE END
1.Interlib图书馆集群管理系统This is my pagehttp://yzt.hzlib.net/interlib/login
2.ASP.NET实现图书管理系统的步骤详解实用技巧这篇文章主要介绍了ASP.NET图书管理系统简单实现步骤,本文通过实例截图展示的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】 一、数据库添加 1.用户信息 2.图书信息表 3.图书借阅信息表 https://www.jb51.net/article/176736.htm
3.asp.net图书管理系统源代码html图书管理系统源码图书管理系统就是利用计算机,结合互联网对图书进行结构化、自动化管理的一种软件,来提高对图书的管理效率。本系统采用Java+Servlet+Jsp+MySQL 的方式实现基于Web的图书管理系统。 02 开发工具及相关技术 2.1 Java技术 Java是由Sun Microsystems在1995年首先发布的编程语言和计算平台。有许多应用程序和Web站点只有在安装Jahttps://blog.51cto.com/u_16099247/7739401
4..NET&Web图书管理系统图书管理系统wed基于ASP.NET图书管理系统源码,上.NET课时候用的,适用于初学者。 基于ASP.NET MVC技术的图书管理系统的设计与实现(1).zip 09-17 基于ASP.NET MVC技术的图书管理系统的设计与实现(1).zip ASP.NET在线图书馆管理系统(完整源码) 11-21 ASP.NET在线图书馆管理系统,数据库采用SQL Server 2005,测试前请附加,https://blog.csdn.net/syh_SYH0321/article/details/127352049
5.CNKI科研诚信管理系统研究中心大学生论文检测系统(本科生版) 论文检测 | 教师审阅 | 诚信档案 | 统计报告 大学生毕业论文(设计)管理系统 论文选题-开题-评审答辩全流程服务 | 课程排重 | 选题分析 | 内容/格式检查 | 论文相似性检测 研究生培养 提供课程作业管理、学位论文送评审与检测服务,赋能研究生培养质量保障体系建设 课程学习全过程https://check.cnki.net/
6.图书馆管理系统(c#.net源码)图书馆管理系统 - .Net源码 - C# 应用了几乎所有.net1.0的技术制作的图书馆管理系统,有详细的设计文档。 立即下载 上传者: applekill 时间: 2009-01-15 C# .net 图书馆管理系统~原创作品,带C#和SQL2005源码 C# .net 图书馆管理系统~原创作品,带C#和SQL2005源码用LINQ to SQL 连接数据库 ,可以注https://www.iteye.com/resource/leo_han-11008805
7.基于.NET技术的高校图书馆管理系统设计与实现图书管理 高校 .NET技术 设计https://cdmd.cnki.com.cn/Article/CDMD-10614-1013331328.htm
8.C#ASP.NET+Vue高级网上书店管理系统:集成大数据分析,智能网上书店管理系统-选题背景 随着互联网技术的飞速发展,电子商务已经成为现代商业活动的重要组成部分。网上书店作为电子商务的一个分支,以其便捷的购书体验和丰富的图书资源受到了广大https://www.jianshu.com/p/8a9923f101a8
9.里诺仓库管理系统进销存软件wms仓储里诺仓库管理系统(12月05日),确保企业及时准确地掌握库存的真实数据,合理保持和控制库存。面世16年,5万家中小企业选择!软件简单实用,7天学会操作。http://lenosoft.net/
10.数字图书馆系统,数字图书馆软件,电子图书馆系统,电子图书馆软件南京通如科技有限公司电话:13952021801,主要销售电子图书馆,电子图书馆系统,电子图书馆软件,数字图书馆,数字图书馆系统,数字图书馆软件,中小学电子阅览室,小学初中高中数字图书馆平台等高科技软件产品.http://tongru.net/
11.科学网—圕人堂周讯(总第420期20220527)天行健:“为建设信息管理与信息系统、大数据管理与应用本科专业和图书情报与档案管理(信息资源管理)、管理科学与工程学术硕士学位点及图书情报专业学位点,西南大学商贸学院亟须引进图书情报与档案管理(信息资源管理)、管理科学与工程、计算机科学与技术及相关专业的博士毕业生,有编制,达到学校职称评审条件者可评为副教授。https://wap.sciencenet.cn/blog-213646-1340467.html
12.我校图书馆ILAS管理系统操作指南ILAS管理系统图书检索网址:(用于实现馆藏查询、网上续借等功能) https://opac.fslib.com.cn/ILASOPAC/ 我校读者可凭身份证在佛山市联合图书馆各成员馆内享受借还服务。 具体操作指南: 一、 书目检索 1、 登录ILAS检索页面:(https://opac.fslib.com.cn/ILASOPAC/); https://tsg.fspt.net/info/1086/1561.htm
13.高校数据安全范文8篇(全文)高校数据中心是保障校内多个应用系统安全运行, 保证学生身份认证和管理、日常办公、人事管理、财务管理、图书资料管理、教务选课等工作的前提条件,另外数据中心内存有学校各种重要的资料和关键的数据。 保证这些资料数据的安全, 保障各应用系统的安全运行是数据中心的一项重要职责, 所以进行数据中心信息安全建设是确保高校数据https://www.99xueshu.com/w/ikeyiirpvtv2.html
14.腾讯网腾讯网从2003年创立至今,已经成为集新闻信息,区域垂直生活服务、社会化媒体资讯和产品为一体的互联网媒体平台。腾讯网下设新闻、科技、财经、娱乐、体育、汽车、时尚等多个频道,充分满足用户对不同类型资讯的需求。同时专注不同领域内容,打造精品栏目,并顺应技术发展趋https://qq.com/
15.北京科技大学信息化建设与管理办公室3.好读:http://www.haodoo.net/?M=hd&P=welcome (以大众图书为主,可以免费下载) (二)论文 1.华艺台湾学术文献数据库: http://www.airitilibrary.cn/ (以台湾地区文献为主,包括台湾英文文献。繁简均可,结果一致。建议简体+英文同时检索) 2.台湾硕博论文知识加值系统:http://ndltd.ncl.edu.tw/cgi-bin/https://info.ustb.edu.cn/ITxy/cylj/b77b2476c54345e698c934655ef836ca.htm
16.基于VB.NET的图书管理系统的开发设计基于VB.NET的图书管理系统的开发设计[技术研发]刘辉约2544字摘要:介绍使用VB.NET和SQLServer2000开发图书管理系统的方法,该系统具有功能强大、安全性好、通用性能好、扩充性好以及易于操作等优点。关键词:图书管理系统;VB.NET;SQLServer2000中图分类号:TP文献标识码:A文章编号:1671-7597(2010)0910086-011系统分析图书https://www.docin.com/touch/detail.do?id=89136216
17.网吧管理网吧计费网吧计费系统安全保护美萍安全卫士系统(安全美萍软件,网吧管理,网吧,网络安全,网吧计费,系统安全,游戏房,电脑安全,安全防护,安全管理软件,美萍安全卫士,美萍网管大师http://www.mpsoft.net/smenu.htm
18.温州市中小学云图书馆平台用户名: 密码: 记住帐号http://cloudlib.wzer.net/
19.2022德国iF最佳产品设计金奖作品新鲜出炉!(完整版)作为行业领先的智能建筑可视化系统,亚信数字大厦秉承以人为本的设计理念,拥有首页预览、环境、能耗、安防、物联网、管理等核心功能模块。采用5G、物联网、大数据、人工智能和数字孪生技术,致力于打造“有温度、有意识、智慧发展”的数字生活形态,通过安防监控、便捷接入、风险防范、精准服务。在积极响应COVID-19管理的同https://www.digitaling.com/articles/757945.html