Fork me on GitHub
NET Core+Code First+Docker

NET Core+Code First+Docker背景介绍

本文将会示范如何在Windows系统下基于ASP.NET Core构建跨平台服务,并通过Docker容器运行发布。 首先说一下为什么选择这一套组合: 我本人和我们Code4Thought团队关注一切具备生产力的技术和工具,话说有所了解才有所选择,DotNet技术发展趋势也值得我们关注和支持。基于DotNot Core我们可以构建跨平台服务,结合Entity Framework Core(微软强大的ORM),MYSQL(免费),Docker(方便移植),Visual Studio 2015(宇宙最强IDE)这一系列技术和工具,不管从商业成本,可移植性,还是生产效率上,都具备很强的诱惑力。

开发环境
创建项目

1,创建ASP.NET Core,可以通过.Net Core SDK提供的命令创建,当然在Windows环境下最佳选择还是宇宙最强IDE:Visual Studio,本文使用2015 Update3 版本:

选择Web 应用程序,创建成功后,VS会自动执行 dotnet restore 自动还原project.json 中的依赖项,项目结构如下:

介绍几个变化项:

project.json:类似JAVA世界的Maven,管理了程序的依赖项,包括程序集,工具,配置等。

Program.cs:跟JAVA世界还是很像,程序会找到其中的Main方法做为启动入口,模板代码是通过微软Microsoft.AspNetCore.Hosting 自托管当前Web程序。

Startup.cs:初始化应用程序服务,全局配置,服务注入等。

wwwroot:前端项目文件。

NuGet获取依赖项

通过Nuget命令行或管理工具,获取项目所需依赖程序集和工具:

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Tools (还需要添加到tools内,后续需要使用Migrations命令)
  • SapientGuardian.EntityFrameworkCore.MySql  或者 MySql.Data.EntityFrameworkCore(官方推荐的尚未发布正式版,https://docs.efproject.net/en/latest/providers/index.html)

Get成功之后,project.json如下:

 

Code First尝试

下面我们使用Entity Framework Core试用Code First模式,结合领域驱动设计,快速构建领域模型,假设建模后的模型包含 “用户“”和“物品“两个实体,当然这种开发模式可以充分利用面向对象的设计理念,比如领域模型通过继承获取一些系统属性:BaseEntity

 View Code
 View Code
 View Code

 

构建DbContext:

 View Code

 

通过Startup.cs 注册MyDbContext,ASP.NET Core 默认设计了IOC容器管理服务对象

MySqlConnectionString 配置数据库连接:

编写业务逻辑实现(本文只是简单示例所以直接写到Controller),测试EF Core基本的增删改查,基本都能用,但还有一些不完善,比如导航属性还没有实现。

 View Code

测试跟踪SQL语句执行过程

到此项目所有代码已经开发完成,我相信在效率上还是有一定诱惑力,能快速构建和实现中小型项目。

数据迁移

微软还给我们提供了一套数据迁移方案,打开Nuget 命令行,

执行命令 Add-Migration ,生成数据迁移代码和历史文件

执行命令:Update-Database ,更新和创建数据库(如果数据库不存在则创建,测试过程中,发现需要先创建一个空数据库)

查看Mysql数据库,数据表已经自动生成如下:

 

通过Docker部署

Docker的优势本人不重复赘述,在Windows 下安装Docker后,通过Windows Power Shell执行命令:

Docker --version

正常显示如下:

 

在项目文件目录,为项目创建Dockerfile,Dockerfile 内写入Docker镜像的创建过程和命令,注意Dockerfile不需要包含后缀名,文件内容如下:

 

FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app

RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]

EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000

ENTRYPOINT ["dotnet", "run"]

 

文件逻辑: 获取微软提供的DotNet Core程序运行的官方镜像,可直接运行到Linux,将当前文件夹文件拷贝并设置工作目录到/app 文件夹,也就是会将刚才项目所有文件拷贝过去。

执行 dotnet 的restore 和 build 命令,最后执行dotnet run 命令启动程序。

 

创建Docker镜像,执行命令:

docker build -t test:codefirst .

会首先下载微软官方镜像,然后按Dockerfile 进行构建:

 

稍等下载和镜像构建完成,通过命令运行镜像:

docker run -d -p 8888:5000 -t test:codefirst

运行成功,可以直接访问端口8888,访问Docker运行的服务了。

 

 

结束语

 本文简单介绍和尝试了微软一系列技术的可行性和真实开发效率,试用过程中,能明显感受到微软前所未有的开放度,希望大家多多指导,共同分享,共同改变。

posted on 2016-09-28 16:04  HackerVirus  阅读(1028)  评论(0编辑  收藏  举报