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.免费的图书管理软件其次,免费的图书管理软件为图书馆的藏书管理提供了便利。通过软件的管理系统,我们可以实现对图书的分类、检索、整理等工作,大大提高了图书馆工作人员的工作效率。而且,软件还具备智能化的图书推荐功能,根据用户的阅读历史和兴趣推荐相关书目,帮助读者发现更多优质图书,促进了阅读的广度和深度。 http://share.office369.com/yingyong/100852.html
2.图书馆自习室座位预约管理系统微信小程序+SSM毕业设计源码+数据库图书馆自习室座位预约管理系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程Y资源推荐 资源详情 资源评论 图书馆自习室座位预约管理系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程YY.zip 浏览:143 图书馆自习室座位预约管理系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程YY 图书馆自习https://download.csdn.net/download/2403_89464395/90095089
3.网上免费图书馆管理系统软件有哪些值得推荐?软件技巧下面给大家推荐几款好用的免费的图书馆管理系统软件,有需要的小伙伴们来了解一下。1. 先锋图书馆管理系统 2024 v6.1https://xiazai.zol.com.cn/jiqiao/67545.html
4.下载最新德庆图书馆自动化管理系统pc版免费下载安装德庆图书馆自动化管理系统官方版是款专门应用于图书资料管理工具,其德庆图书馆自动化管理系统最新版内置丰富的功能,主要具有借阅管理、借阅查询、借阅流水、预借详情等功能,且德庆图书馆自动化管理系统可以方便地查询到图书、读者、借阅的图书、读者押金充值记录、超期罚款记录以及借阅流水等相关资料。 德庆图书馆自动化https://m.onlinedown.net/soft/1228838.htm
5.99图书馆管理系统下载99图书馆管理系统v99.4455.0.099图书馆管理系统 v99.4455.0.7商业贸易 软件等级: 软件大小:29.59MB 支持语言:简体中文 授权方式:免费版 软件分类:行业软件/商业贸易 官网链接: 更新时间:2024-11-21 16:10:04 运行环境:WinXp,Win2003,WinVista,Win 7,Win 8,Win 10,x64 厂商: https://www.crsky.com/soft/321618.html
6.图书馆管理系统绿色版下载图书馆管理系统免费版《图书馆管理系统》用于图书馆的图书管理,包括入馆图书登记管理、图书借阅管理、图书归还管理、图书报废管理。提供强大的图书查询功能,使您很放便的了解到某一图书的现存数量、借出未还数量、报损数量及图书的存放书架。并提供各种统计报表。网络版软件不包括后台数据库SQL SERVER,需用户自备,软件采用三层结构,仅服务器https://www.188soft.com/soft/919813.html
7.中小学图书管理系统中小学图书管理系统下载v3.0免费版软件授权:免费软件 中小学图书管理系统安装教程 中小学图书管理系统是一款通用性极强的图书管理软件,适用于中小学图书规模的图书馆,拥有图书借还、图书查询、借阅管理、读者管理等功能模块,避免图书摆放错乱、丢失等问题,帮助图书馆工作人员减轻工作量。 中小学图书管理系统简介 https://www.wmzhe.com/soft-36923.html?tdsourcetag=s_pcqq_aiomsg
8.《2025最新》图书管理系统(附源码)《2025最新》图书管理系统(附源码)-增删改查,手把手教学,一小时搞定,毕设简历必备项目_java项目_web项目_网站搭建_管理系统共计5条视频,包括:1. 1-项目功能演示、2. 2-项目部署讲稿、3. 3-项目资料介绍等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV19eqHYSEu2/
9.CNKI科研诚信管理系统研究中心大学生论文检测系统(本科生版) 论文检测 | 教师审阅 | 诚信档案 | 统计报告 大学生毕业论文(设计)管理系统 论文选题-开题-评审答辩全流程服务 | 课程排重 | 选题分析 | 内容/格式检查 | 论文相似性检测 研究生培养 提供课程作业管理、学位论文送评审与检测服务,赋能研究生培养质量保障体系建设 课程学习全过程https://check.cnki.net/
10.中小学图书管理系统(图书管理软件)V2.0免费版下载中小学图书管理系统免费版是一款功能非常强大的中小学图书管理软件,中小学图书管理系统新版在继承了以往系统版本优点的基础上做了进一步优化;在功能上包含图书管理的常用功能(如图书管理、读者管理、借、还、数据备份、数据的导入导出和统计分析等等功能),增加了数据上传服务器的功能,教育局版增加了数据下载和数据汇总功能https://www.xiazaiba.com/html/26627.html
11.美萍图书业务管理系统下载授权:免费软件 更新:2024-04-12 厂商:郑州美萍网络技术有限公司 标签:图书管理 环境:Windows11,Windows10,Windows8,Windows7,WinXP,WinVista,Win2003,Win2000 9.1 0%0% 详情介绍 小编给大家介绍一款好用的图书管理系统软件,就是这款美萍图书馆管理系统!能更有效的对图书进行系统管理,方便读者对各类图书的查询,同时https://www.32r.com/soft/23556.html
12.中专中小学图书管理系统□影音资料管理系统的后台数据库是否支持MS_SQL2000中文版? □为什么借书证的相片不能显示? □读者管理中,在增加读者的相片时,选择相片是正常的,但确认后,发现相片变花,为什么? □我为什么要经常备份数据库?每次备份时是否将所有的数据都备份了? □如何备份数字图书馆的数据? http://www.hfjsj.com/server/help/question.asp
13.图书馆管理系统用户操作说明2024鲜版.ppt图书馆管理系统用户操作说明2024/3/281系统概述与功能介绍用户注册与登录流程图书检索与借阅服务个人信息管理服务图书馆资源推荐与分享系统安全与常见问题解答contents目录2024/3/282系统概述与功能介绍012024/3/283图书馆作为知识传播和信息交流的重要场所,其管理效率和服务质量直接影响读者体验和学习效果。传统图书馆管理方式https://m.renrendoc.com/paper/323805022.html
14.许昌学院信息化系统使用指南(教师版)1)教学服务:主要是和教学相关的一些业务系统,如教务系统、我的课表、在线课程、智慧教室、创新创业实践学分系统、我的图书馆、实验室管理系统等。 2)科研服务:服务于师生的科研工作,如科研系统、中国知网、Springer数据库、IEEE数据库。 3)办公服务:服务于教师日常办公的应用系统,主要包括OA协同办公系统(行政发文、校https://wlzx.xcu.edu.cn/info/1025/2091.htm
15.智慧图书馆智能图书管理系统图书管理平台智慧云图书馆智慧图书云图版 节省5%~10%成本,提高20%~30%利润,移动云计算存储私密安全。 适用场景 适合各类有一定经营历史的书店升级智慧书店,客户以老客、熟客为主,涉及一部分会员客户及储值客户,需要进行数据切换。 配置描述 智慧供应链采购系统 智慧书店ERP 聚合支付结算机具 https://ecloud.10086.cn/home/solution/enterprise/library
16.免费图书管理系统驭文免费图书管理软件适用于各行各业图书馆自动化管理,快捷的图书录入,读者录入、图书借还、统计分析、条码打印、书标打印、备份管理等业务场景;软件支持sip2系统,可与北创图书自助借还书机无缝对接。 驭文图书管理系统免费版还能提供非常多的功能,比如图书录入、读者录入、图书流通操作等功能,不过也有收费版的,如:图书的藏书量有相应的10https://free.bc863.com/Wap/ywtsgxt/index.html