用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章:  https://www.cnblogs.com/cgzl/p/8450179.

最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目.

这里是我写的关于vscode的一篇文章: 

https://www.cnblogs.com/cgzl/p/8450179.html

http://www.cnblogs.com/cgzl/p/8450409.html

这篇文章写的是使用mac(linux)/win10开发一个基于asp.net core 2.0 web api, angular 5, bootstrap 4, sql server linux(使用到docker)的小项目.

该文章大约分这几部分:

  • 开发环境的搭建
  • 建立和配置asp.net core 2.0 web api
  • 建立和配置angular5项目
  • 开发基本的CRUD功能
  • 基于Unit Of Work和Repository等Pattern对项目重构
  • 其他业务功能的实现, 例如文件上传等
  • 授权和验证

该文章涉及到以下技术:

asp.net core, angular 5, vscode, docker, sql server on linux, bootstrap 4.

------------------------------------------------------------------------------------------------

项目需求:

开发一个电视剧管理程序, 数据表有:

TvNetworks(电视台), TvShows(电视剧), TvShowSeasons(电视剧分季), Tags(分类标签), TvShowTags(电视剧到分类标签).

就是对电视台, 电视剧等信息进行CRUD维护的程序.

------------------------------------------------------------------------------------------------

开发环境配置

1. 安装.net core sdk:

到官网下载并安装相应平台的.net core sdk: https://dotnet.github.io

安装好之后, 打开命令行: 执行dotnet --version, 可以看到版本号, 这就说明安装成功了.

2. 安装visual studio code:

官网: https://code.visualstudio.com/

安装好之后, 可以选择把vscode添加到Path: 

使用command+option+p(mac)或者ctrl+shift+p(win)打开命令板, 输入path, 选择install code command in path.

然后打开命令行 输入 code . 如果vscode能打开当前目录, 那么说明操作成功了.

我安装了如下扩展:

当然python扩展可以不用安装...🤣

3. Sql Server:

貌似目前没有mac版本到sql server. 所以采用docker.

首先安装docker: https://www.docker.com/docker-mac 这个是mac版本到下载地址, 下载后按照说明安装即可.

对于windows 10版到, 首先要确保您到windows 10要高于Home版. 因为docker win 10版依赖于hyper-v, 而win10 home版没有hyper-v.

安装好之后, 需要调整以下docker的设置, 至少需要4G内存(sql server需要):

docker的简介可以参考我写的这片入门级文章: http://www.cnblogs.com/cgzl/p/8458926.html

然后下载sqlserver linux版的image (https://hub.docker.com/r/microsoft/mssql-server-linux/), 命令行输入:

docker pull microsoft/mssql-server-linux

这个操作在国内可能会很慢, 请耐心...

下载好之后, 查看本地的images, 使用命令:

docker images

接下来安装并运行这个image:

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=一个复杂的密码' -p 1433:1433 -d microsoft/mssql-server-linux

成功后, 使用docker ps命令可以查看正在运行的进程:

使用docker ps -a 可以查看所有的进程, 包括已经停止的.

然后我们使用vscode测试以下这个sqlserver, 在vscode里面添加一个xx.sql文件, 待vscode自动安装好相应的插件后, 使用cmd+opt+p打开命令板, 输入mssql, 选择mssql: connect:

如果以前没有连接过的话, 就选择 Create Connection Profile:

然后输入server的名字localhost:

]

接下来输入数据库名, 因为还没有建立任何数据库, 所以就输入master吧: 

选择登陆类型 SQL Login(如果是win10的话, 也可以选择integrated):

用户名sa:

密码:

然后选择是否保存密码, 最后给这个连接起一个名字:

这些操作完成后, 就会尝试连接master数据库, 连接成功的话上面会有提示框, 右下角也可以看出来:

写一个sql 语句测试以下:

SELECT * FROM dbo.sysdatabases;

点击右键(cmd+shift+e)执行sql:

ok, 数据库安装成功.

如果docker重启后, 可以使用“docker start (容器ID的前两位)”命令启动这个sql容器.

4. 安装angular cli:

首先安装nodejs: https://nodejs.org/en/

然后执行命令安装 angular cli:

npm install -g @angular-cli

------------------------------------------------------------------------------------------------

建立asp.net core项目

命令行执行命令, 建立文件夹和webapi项目:

mkdir Tv && cd Tv && dotnet new webapi

然后执行dotnet run:

浏览器访问http://localhost:5000/api/values:

项目建立成功了.

然后在命令行输入code . 就可以用vscode打开该目录了:

关于asp.net core 2.0的简介可以参考我的文章: http://www.cnblogs.com/cgzl/p/7637250.html

环境变量:

运行dotnet run的时候, 可以看到这句话:

这表示当前的宿主环境变量为Production, 而我们可能需要用到Development或者Staging.

有几种办法可以更改这个环境变量的值:

1. 在执行dotnet run之前设置环境变量:

mac: export ASPNETCORE_ENVIRONMENT=Development

windows: set ASPNETCORE_ENVIRONMENT="Development"

2. windows下可以在控制面板--系统--高级设置里面设置环境变量的值

3. mac下, 进入用户的home目录, 然后执行

code .bash_profile

在该文件后面加上:

export ASPNETCORE_ENVIRONMENT=Development

这样也可以.

4. 在项目的appSettings.json文件里面设置也可以:

使用visual studio 2017的话, 可以在项目的launchSettings.json设置.

使用vscode的话, 可以在项目目录的launch.json进行设置.

不过这就需要使用vscode来启动项目了.

安装.net watch tool

经常开发前端的都知道, 前端项目开发的时候一般都采用hot module replacement技术, 就是文件有变化的时候, 自动重新编译并刷新浏览器.

默认情况下dotnet run没有这个功能, 所以需要添加dotnet watch tool来实现类似的功能: https://github.com/aspnet/DotNetTools/blob/dev/src/dotnet-watch/README.md

打开Tv.csproj添加此行:

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
    <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
  </ItemGroup>

然后执行命令:

dotnet restore

这样就使用下面的命令来代替dotnet run:

dotnet watch run

您可以随便修改一点代码, 然后就可以看到项目被重新编译并运行了.

Debugging asp.net core

参考我这篇文章: http://www.cnblogs.com/cgzl/p/8450179.html

切换到Debug画面, 然后注意选择到是.net core attach, 因为我们之前运行着dotnet watch run, 所以只能附加着去调试.

点击绿色到调试箭头, 或者按F5, 需要选择相应到命令:

由于dotnet watch run随时会build出新到Tv.dll, 所以attach到dotnet Tv.dll即可. (dotnet watch run 和 dotnet exec是两个不同到进程).

集成Git

在项目目录执行git init之后, 左边到Git菜单就会起作用了:

常用都git命令都有对应的菜单. 不过这篇文章里, 其实并没有使用到git.

-----------------------------------------------------------------------------------------------------

配置asp.net core 2.0 web api

这一部分, 主要做以下几方面工作:

  • 建立api
  • 配置和使用entity framework core 2.0
  • 配置asp.net core
  • 使用automapper

建立domain models:

这里有一些快捷操作, 如果是新手的话可能不知道, 那么这一段我使用视频. 

视频好像发布不出来, 请看连接:

http://v.qq.com/x/page/u0560t3iwef.html

http://v.qq.com/x/page/w05600dxo8j.html

这两个model的代码如下, Models/TvNetwork.cs:

using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace Tv.Models
{
    public class TvNetwork
    {
        public TvNetwork()
        {
            TvShows = new Collection<TvShow>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public ICollection<TvShow> TvShows { get; set; }
    }
}

 

注意建立属性的快捷键是prop, 建立构造函数的快捷键是ctor.

为了避免使用TvShows属性时出现NullReference Exception, 所以建议在构造函数里面初始化集合导航属性.

 

Models/TvShow.cs:

namespace Tv.Models
{
    public class TvShow
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int TvNetworkId { get; set; }
        public TvNetwork TvNetwork { get; set; }
    }
}

添加Entity Framework Core

这里需要使用到dotnet ef 命令, 在项目目录下执行命令:

dotnet ef

 

没有找到这个命令, 这是因为还没有添加ef到tools到项目.

参考官方文档: https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

执行命令: 

dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet restore

 

然后打开Tv.csproj添加一个引用:

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
    <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
  </ItemGroup>

 

再执行dotnet restore即可. 这时再执行dotnet ef命令, 就可以使用了:

创建DbContext

创建一个文件夹叫做Database, 然后在里面建立一个文件TvContext.cs:

using Microsoft.EntityFrameworkCore;

namespace Tv.Database
{
    public class TvContext : DbContext
    {
        public TvContext(DbContextOptions<TvContext> options)
            : base(options)
        {

        }
    }
}

 

根据官方文档, 就是这样建立dbcontext的.

使用dbcontext的时候, 是需要依赖注入的. 所以需要在Startup.cs的ConfigureServices把TvContext注册到容器:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<TvContext>(opt => opt.UseSqlServer(""));
            services.AddMvc();
        }

http://v.qq.com/x/page/f056037xm2q.html

通常我们是在appSettings.json里面添加数据库连接字符串:

{
  "ConnectionStrings": {
    "Default": "server=localhost; database=tvdb; user id=sa; password=Bx@steel1;"
  },
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

回到Startup.cs, 可以使用这两种方式取得连接字符串: 

public void ConfigureServices(IServiceCollection services)
        {
            // services.AddDbContext<TvContext>(opt => opt.UseSqlServer(Configuration["ConnectionStrings:Default"]));
            services.AddDbContext<TvContext>(opt => opt.UseSqlServer(Configuration.GetConnectionString("Default")));
            services.AddMvc();
        }

 

下面, 就可以创建数据库了.

创建数据库

首先添加migrations:

dotnet ef migrations add Initial

 

执行成功后, 会在项目里生成一个Migrations文件夹:

可以看到Initial Migration文件里面什么也没有, 因为我忘记把Domain Model添加到TvContext里面了.

所以使用命令:

dotnet ef migrations remove

 

来移除上一次添加并且还未更新到数据库的migration, 注意这时候需要停止dotnet watch等操作, 还要注意的是, 在ef core里千万不要手动删除迁移文件, 因为这里多出了一个Snapshot文件, 它和所有的迁移是同步的.

相应的迁移文件也被删除了.

修改TvContext:

using Microsoft.EntityFrameworkCore;
using Tv.Models;

namespace Tv.Database
{
    public class TvContext : DbContext
    {
        public TvContext(DbContextOptions<TvContext> options)
            : base(options)
        {

        }

        public DbSet<TvNetwork> TvNetworks { get; set; }
        public DbSet<TvShow> TvShows { get; set; }
    }
}

然后重新执行dotnet ef migrations add Initial:

最后执行生成数据库的命令:

dotnet ef database update

 

数据库生成成功:

 

 

今天先写到这, 过几天会继续写. 

下面是我的关于ASP.NET Core Web API相关技术的公众号--草根专栏:

相关实践学习
使用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
目录
相关文章
|
4天前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
14天前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
14天前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
36 3
|
19天前
|
开发框架 .NET C#
VSCode开发.net项目时调试无效
【9月更文挑战第22天】在使用 VSCode 开发 .NET 项目时遇到调试问题,可从项目配置、调试配置、调试器安装、运行环境、日志和错误信息等方面排查。确认项目类型及文件配置,检查 `launch.json` 文件及配置项,确保调试器扩展已安装并启用,验证 .NET 运行时版本和环境变量,查看 VSCode 输出窗口和项目日志文件,检查权限及代码错误。若问题仍未解决,可查阅官方文档或社区论坛。
|
1月前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
1月前
开发小技巧vscode
开发小技巧vscode
36 2
|
2月前
|
开发框架 监控 .NET
开发者的革新利器:ASP.NET Core实战指南,构建未来Web应用的高效之道
【8月更文挑战第28天】本文探讨了如何利用ASP.NET Core构建高效、可扩展的Web应用。ASP.NET Core是一个开源、跨平台的框架,具有依赖注入、配置管理等特性。文章详细介绍了项目结构规划、依赖注入配置、中间件使用及性能优化方法,并讨论了安全性、可扩展性以及容器化的重要性。通过这些技术要点,开发者能够快速构建出符合现代Web应用需求的应用程序。
39 0
|
2月前
|
开发框架 监控 .NET
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
|
2月前
|
Linux C# C++
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务