AspNetCore - MVC实战系列(一)

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: AspNetCore - MVC实战系列目录 . 爱留图网站诞生 . git源码:https://github.com/shenniubuxing3/LovePicture.Web . AspNetCore - MVC实战系列(一)之Sqlserver表映射实体模型 .

AspNetCore - MVC实战系列目录

. 爱留图网站诞生

. git源码:https://github.com/shenniubuxing3/LovePicture.Web

. AspNetCore - MVC实战系列(一)之Sqlserver表映射实体模型

. AspNetCore-MVC实战系列(二)之通过绑定邮箱找回密码

AspNetCore-MVC实战系列(三)之个人中心

AspNetCore-MVC实战系列(四)之账户设置

本章开篇先简单介绍下最近两周自己利用业余时间做的一个图片收集网站,当然这个是靠用户自己上传来收集不是去抓某些个网站的图片,那样没意义,这里我取名为“爱留图”;该网站的简单介绍大家可以参考下上篇的内容爱留图的诞生,这里打算通过一些列的博客讲解如何一步步利用aspnetcore的mvc来开发,希望大家能够喜欢;

Sqlserver表映射实体模型(反向工程生成实体模型)

首先,咋们需要在sqlserver中创建一张用户表To_UserInfo,这里我尽量简单取一些属性作为字段,以下是表结构SQL:

USE [LovePicture.Db]
GO

/****** Object:  Table [dbo].[To_UserInfo]    Script Date: 2017/4/25 17:30:53 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[To_UserInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [UserName] [nvarchar](50) NOT NULL,
    [UserPwd] [nvarchar](50) NOT NULL,
    [Email] [nvarchar](50) NULL,
    [NickName] [nvarchar](20) NULL,
    [Tel] [nvarchar](20) NULL,
    [Sex] [bit] NOT NULL,
    [Introduce] [nvarchar](200) NULL,
    [HeadPhoto] [nvarchar](200) NULL,
    [Birthday] [nvarchar](20) NULL,
    [Addr] [nvarchar](200) NULL,
    [Blog] [nvarchar](200) NULL,
    [Status] [int] NOT NULL,
    [CreateTime] [datetime] NOT NULL,
    [LoginTime] [datetime] NULL,
    [Ips] [nvarchar](50) NULL,
    [LevelNum] [int] NOT NULL,
 CONSTRAINT [PK_To_UserInfo] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

字段的意思不必太明了,主要是学习怎么生成实体;先创建一个类库LovePicture.Model,由于这里我打算使用EF Core(全名:entity framework core),因此需要对这个类库安装相应的nuget包:

 Microsoft.EntityFrameworkCore.Design 

 Install-Package Microsoft.EntityFrameworkCore.SqlServer 

 Install-Package Microsoft.EntityFrameworkCore.Tools 

 Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design 

注意啦是4个包,netcore官网给出的只有后面3个包没有第一个,有实际经验得出如果你不添加第一个包,那么由数据库来生成实体模型的时候会提示错误,这里我就不截图错误信息了有兴趣的朋友可尝试;来到这里咋们还需要通过vs控制台输入执行命令:

 Scaffold-DbContext "Server=127.0.0.1,1431;User Id=sa;Password=123123;Database=LovePicture.Db;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models 

简单说下参数吧:

. Scaffold-DbContext:执行命令

. Server=...:数据库链接字符串

. -OutputDir Models:输出实体到名称为Models的文件夹中

个人领悟的注意事项:

vs2017可能存在的一个问题,当第一次需要在新创建的类库中使用反向工程生成实体模型的时候,如果您不设置该类库为起始项目,那会提示错误没法生成成功的;我遇到的时候用了很多方式尝试解决问题,甚至以为什么东西安错了,结果在Git的问题中心找到了相关问题的回答,仅仅只需要设置下启动项就能解决,真实让我吃惊呢。

到这里如果你按照以上我列举的步骤操作,应该不会出现太大的问题能够通过sqserver数据库生成实体成功,当然不保证其他特殊的情况吧;

在MVC中使用生成的实体模型

首先,通过vs2017创建个Aspnetcore的Mvc项目我取名为LovePicture.Web,我们要了解的是netcore项目基本上都是通过nuget包来引入其他组件,但是强大的vs能够让我们直接通过:右键web项目的“依赖项”-》添加引用-》解决方案-》选择其他项目的名称,以此来添加对其他项目的依赖(主要是新的vs版本所以废话一下);

有了依赖关系我们先来改造一下通过反向工程生成的DbContext代码来满足我们在Web中Mvc的使用;打开模型类库中的LovePicture_DbContext.cs文件,能够看到我们比较熟悉类似于其他EF框架版本的结构,这里我们只需要自动生成的LovePicture_DbContext构造函数删除掉,然后重新添加一个这样的构造函数:

1 public LovePicture_DbContext(DbContextOptions<LovePicture_DbContext> options) : base(options) { }

这样就能吧DbContext当做注入服务提供给引入这个类库的项目使用了,我们也仅仅只需要在Web项目中的Startup.cs文件的ConfigureServices方法中添加依赖注入即可:

 1 //添加数据库上下文
 2             services.AddDbContext<LovePicture_DbContext>(b =>
 3             {
 4 
 5                 var dbLink = Configuration.GetSection("MoSelfSetting:DbLink").Value;
 6                 if (string.IsNullOrWhiteSpace(dbLink)) { throw new Exception("未找到数据库链接。"); }
 7 
 8                 b.UseSqlServer(dbLink);
 9 
10             });

这里由于链接数据库的话需要有一个连接串,这里通过DbContextOptionsBuilder的UseSqlServer扩展方法来传递,字符串的来源这里我配置在appsettings.json配置文件中的,因此能够很方便的通过 Configuration.GetSection("MoSelfSetting:DbLink").Value 来读取出配置文件中配置的连接串,当然如果可以你也可以直接在这里吧连接串写死都行,这里截图展示下配置文件的层级关系:

好了有了以上的配置,咋们就能够在MVC的Controller中很好的使用DbContext了,这里通过构造函数注入的方式使用:

1     private readonly LovePicture_DbContext _db;
2         public HomeController(LovePicture_DbContext db)
3         {
4             _db = db;
5         }

到这里Controller中就能够使用DbContext了,我们可以在Action中直接通过各种EF的操作方法来对数据库执行读写命令;

通过IOptions<T>使用自定义配置信息

因为后面文章内容涉及到用户上传头像等信息,所以需要一些可配置的信息(如:上传路径,链接字符串),所以这里需要有读取我们自定义配置节点信息的操作;这里使用现成的appsettings.json文件来配置信息,这里我的配置内容如:

 1 {
 2   "Logging": {
 3     "IncludeScopes": false,
 4     "LogLevel": {
 5       "Default": "Warning"
 6     }
 7   },
 8   "MoSelfSetting": {
 9     //图片内容路径
10     "UpHeadPhotoPath": "D:\\F\\学习\\vs2017\\netcore\\LovePicture.Web\\wwwroot\\upfile\\headphoto",
11     "ViewHeadPhotoPath": "/upfile/headphoto",
12     //头像路径
13     "UpContentPhotoPath": "D:\\F\\学习\\vs2017\\netcore\\LovePicture.Web\\wwwroot\\upfile\\contentphoto",
14     "ViewContentPhotoPath": "/upfile/contentphoto",
15     //邮箱模板
16     "EmailTplPath": "D:\\F\\学习\\vs2017\\netcore\\LovePicture.Web\\wwwroot\\tpl",
17     //链接字符串
18     "DbLink": "Server=127.0.0.1,1431;User Id=sa;Password=123123;Database=LovePicture.Db;"
19   }
20 }

要获取这个文件的自定义信息,我们需要创建一个对应属性名称的实体MoSelfSetting:

 1 /// <summary>
 2     /// 自定义配置
 3     /// </summary>
 4     public class MoSelfSetting
 5     {
 6         /// <summary>
 7         /// 头像图片保存地址 
 8         /// </summary>
 9         public string UpHeadPhotoPath { get; set; }
10 
11         /// <summary>
12         /// 头像图片访问地址 
13         /// </summary>
14         public string ViewHeadPhotoPath { get; set; }
15 
16         /// <summary>
17         /// 内容图片保存地址 
18         /// </summary>
19         public string UpContentPhotoPath { get; set; }
20 
21         /// <summary>
22         /// 查看内容图片保存地址 
23         /// </summary>
24         public string ViewContentPhotoPath { get; set; }
25 
26         /// <summary>
27         /// 邮件模板文件夹路径 
28         /// </summary>
29         public string EmailTplPath { get; set; }
30 
31         /// <summary>
32         /// 数据库链接
33         /// </summary>
34         public string DbLink { get; set; }
35     }

实体类属性名称和appsettings.json文件的节点名称一样就行了,然后在ConfigureServices方法中添加配置文件设置:

1  //设置自定义配置信息  
2             services.Configure<MoSelfSetting>(Configuration.GetSection("MoSelfSetting"));

仅仅只需要使用这段代码,就能完成从json配置文件的数据到实体数据的转化,比以前的确方便了很多;然后同样通过在Controller中使用IOptions<T>来注入这个配置文件实体到Controller中:

 1  private readonly LovePicture_DbContext _context;
 2         private readonly MoSelfSetting _selfSetting;
 3         private readonly IMemoryCache _cache;
 4 
 5         public MemberController(LovePicture_DbContext context, IOptions<MoSelfSetting> selfSetting, IMemoryCache cache)
 6         {
 7             _context = context;
 8             _selfSetting = selfSetting.Value;
 9             _cache = cache;
10         }

最后通过IOptions<T>.Value方式,直接就能够获取出具有配置文件信息的实体数据了;这里就不再写测试用例了,这些都会在后面一些列章节中运用到,希望本篇文章能给你好的收获,如果可以不妨点个“赞”,谢谢。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
5月前
|
设计模式 存储 前端开发
【设计模式】MVC与MVVM详尽解读与实战指南
【设计模式】MVC与MVVM详尽解读与实战指南
788 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
162 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
165 0
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
210 0
|
6月前
|
前端开发 JavaScript Java
Spring Boot中Spring MVC的基本配置讲解与实战(包括静态资源配置,拦截器配置,文件上传配置及实战 附源码)
Spring Boot中Spring MVC的基本配置讲解与实战(包括静态资源配置,拦截器配置,文件上传配置及实战 附源码)
208 1
|
前端开发 Java 测试技术
Java Web实战 | Spring MVC案例:设计一个简单的Web应用
本文通过一个简单的Web应用来演示Spring MVC入门程序的实现过程。具体步骤如下。
366 0
|
6月前
|
存储 前端开发 Java
Spring Boot中Spring MVC的表单标签库与数据绑定讲解与实战(附源码 超详细必看)
Spring Boot中Spring MVC的表单标签库与数据绑定讲解与实战(附源码 超详细必看)
84 0
|
6月前
|
设计模式 前端开发 Java
Spring Boot之Spring MVC的工作原理 以及使用eclipse开发Spring MVC的Web应用实战(附源码)
Spring Boot之Spring MVC的工作原理 以及使用eclipse开发Spring MVC的Web应用实战(附源码)
86 0
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(完:内附源码)
经过一段时间的准备,【ASP.NET Core MVC开发实战之商城系统】已经完成,目前代码已开发完成,先将全部内容整理分享,如有不足之处,还请指正。
165 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(六)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情,购物车等功能的开发,今天继续讲解订单管理功能开发,仅供学习分享使用,如有不足之处,还请指正。
243 0