Windows下构建ASP.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 版本:

aaarticlea/png;base64,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" alt="" />

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

aaarticlea/png;base64,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*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" alt="" />

介绍几个变化项:

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)

Windows下构建ASP.NET Core+Code First+Docker

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

aaarticlea/png;base64,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" alt="" />

Code First尝试

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace WebApplication2.Domain.Model
{
public class BaseEntity
{ public int Id { get; set; } public DateTime CreateTime { get; set; } public DateTime UpdateTime { get; set; } }
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace WebApplication2.Domain.Model
{
public class UserEntity: BaseEntity
{ public string Name { get; set; } public long Age { get; set; } //其它属性... public virtual ICollection<ProductEntity> Products { get; set; } }
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace WebApplication2.Domain.Model
{
public class ProductEntity: BaseEntity
{
public String Name { get; set; } public virtual UserEntity Owner { get; set; } //其它属性... }
}

构建DbContext:

 using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using WebApplication2.Domain.Model; namespace WebApplication2.Domain
{
public class MyDbContext: DbContext
{ public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options)
{ }
public DbSet<UserEntity> UserEntity { get; set; }
public DbSet<ProductEntity> ProductEntity { get; set; }
//protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
//{
//} /// <summary>
/// 配置属性和模型关系等操作
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserEntity>().HasMany(a => a.Products).WithOne(a => a.Owner); } /// <summary>
/// 重写SaveChanges 方法,添加一些自定义操作
/// </summary>
/// <returns></returns>
public override int SaveChanges()
{
ChangeTracker.DetectChanges(); SetSystemProperty(); return base.SaveChanges();
} private void SetSystemProperty()
{
//查询模型添加和变更
var modifiedSourceInfo = ChangeTracker.Entries()
.Where(e => e.State == EntityState.Added || e.State == EntityState.Modified).ToList(); DateTime currentTime = DateTime.Now; //设置系统属性
foreach (var entry in modifiedSourceInfo)
{
entry.Property("CreateTime").CurrentValue = currentTime;
entry.Property("UpdateTime").CurrentValue = currentTime;
} } }
}

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

aaarticlea/png;base64,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" alt="" />

MySqlConnectionString 配置数据库连接:

aaarticlea/png;base64,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" alt="" />

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WebApplication2.Domain;
using WebApplication2.Domain.Model; namespace WebApplication2.Controllers
{
public class HomeController : Controller
{
private MyDbContext _dbContext;
//注入MyDbContext
public HomeController(MyDbContext dbContext)
{
_dbContext = dbContext;
} public IActionResult Index()
{
//查询用户
var checkUser = _dbContext.UserEntity.FirstOrDefault(a => a.Name.Equals("flynn")); if (checkUser == null)
{
//测试创建用户
_dbContext.UserEntity.Add(new UserEntity()
{
Age = ,
Name = "flynn",
Products = new List<ProductEntity>() //用户包含的物品
{
new ProductEntity()
{
Name = "prduct Name1",
},
new ProductEntity()
{
Name = "prduct Name2",
}
}
});
//持久化模型
_dbContext.SaveChanges();
} //再次查询用户,我们可以看到目前Entity Framework Core尚未支持Lazy Loading.
//通过提供Include 和 ThenInclude嵌套获取导航属性
var reCheckUser = _dbContext.UserEntity
.Include(a=>a.Products)
.FirstOrDefault(a => a.Name.Equals("flynn")); var myProduct = reCheckUser.Products.ToList(); return View();
} public IActionResult About()
{
ViewData["Message"] = "Your application description page."; return View();
} public IActionResult Contact()
{
ViewData["Message"] = "Your contact page."; return View();
} public IActionResult Error()
{
return View();
}
}
}

测试跟踪SQL语句执行过程

Windows下构建ASP.NET Core+Code First+Docker

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

数据迁移

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

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

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

Windows下构建ASP.NET Core+Code First+Docker

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

aaarticlea/png;base64,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" alt="" />

通过Docker部署

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

Docker --version

正常显示如下:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUwAAABBCAIAAAA15QpiAAAFZklEQVR4nO2da47bMAyEk7vsmfb+F+iiN0h/BDBSSxwOqYe18gAfirUsURSpkWUnqR8/f/6+eX59P7++Pw+Pf4+zRx2r/BO3vOzxVFjtpSwE9styfFgF+w9CUf6Bu2P8r6YJxModVGiwofwyQya9KuNDJr1Lv7gVky9+XvGHYNadeGAnQuVCiAUxRR668AohlgVdyYUQGyCRC7E5V4p8tT3/av4I0YXH6RFf44PKRH3LQvVwNO7T5mqFac6IcaHeONqPZzGZPgVWLQeRCtW36iTs9CLkz4QFKG389Xq8XpltWrrhr0YiP5eDSIXqW3WWFTnj7RyXGNJavaHI9yYgcgyzBJAiuVDk2J9LRJ7uQiIXb5DIy1OAOSK3bo/xN4dwfXdNwU8ZrKcYVkfVClUnQ+F9895sH1TLrSafJeDUqfDz0OqiBT6P6bzj5ObytRQPa+SncTLJSGcRl7i3D+6iwNfH/jQuUuWEw+XRCJ/U9alDq5qlbbdh2dZqVR0IFltZbiV3Tt5z+VqHypXcSkxjBb4tKWamOSlL0iBvzZ2gwGzO52dc5JYaj8syaR+Y6kJO5NEYtl9sloUVeSJGPPwSW91xWFcA4BXYuUSzOEHkZGw7ihxv7MEOfxDHDtlKYnvebyry6GBaBk+u0EzQoz64Os+tbuVMyk0aPox9r+Sgodt1dyyRR5MSirNE7tSvhozMSjS4jdu2lUUemkDkTTJ/Tw7+xqdGwIvQilt0Md1H5HjXire1oIl1ikwhsy3H9cnKzDYhFx+r02rbaneJ2VM+6z6Vu0/X8dNy8HR99Ldo3BSk856bV+70WIeFPhFdLVKN/qw2HHFbJPL+/qy/tItbsZDIhRAjkMiF2ByJXIjNOf+e/HKHrmVOEKJdVB/dR1N2SX6Zzy/a7Y8bmvvUfXI8c5w/J7/506bRo8gps5xh4NCyw1fuGBnrw0XXGtNdIg6hjiz7XfQyE+dXaNF4XT6eX0HjlTyarzXzG3V7/rgYkXcPywgk8guQyBNuzx/XXUQO7nnKcvA1oNLO5yG/f7PqR+1/1gduu/ZJ50troSS5kQk1bxRDNZLVQxwZN86Mn0B4VSNWYTmQUF9uv9eS/O+fLG27DatBqVYDUQZ/M/Z593AFa41z6SjykBJyvbvJisYzGmfeKzdf1TrMJEy0XUfnGZHjQISSl74A8iLHdpiziUWQH0hLfV4GLb03xmGoyBOLztNbnV3HDgunCX8XkVc3Kj//78HSIj/ql45F7VcrkzleROTp7rYROfAHzIdyCuX8D/V7Lf2v5KEw9RJ5i/3oQr6CyNM7oETvjXG4RORufVLk6d3EUqDPycnBVwfZMYggVTn70Uk5WuTuqk86DOxYOYouFkyuu4ic8S19cbIu72Bc1il+R3AhzjfemFPlYdmktIP75VObsG+dIpu4w8fOW6ai9UN2rLOJyLuToZwGiTi7w8HzE5efjFvdWXHG8UxM6dHou+u3Zqm5KAYhkd8XKfwmSORCbI5ELsTm6P3k6/ojRBf0fnLWH8uTcb5p0RFd0KuL8/5MWICkc9GORB7wh/F2jktC8Oj95AF/LhH5/AiIzdD7ySuPIaqek/5bbljOACdD4RXCQu8n9zcO0Ss5vofny3tFWNwcvZ88YJC3Vm2SWKS6hFfcHL2fvPXJ3wSRS+GiBb2f3L9y5lY3924/ffsgRAi9n3xpkUvhoh29n9zfJuTiY3VabVvtTgoXXVjoByqrzelGf1YbjrgtEnl/f/iNjxATWEjkQogRSORCbI5ELsTmSORCbI5ELsTmSORCbI5ELsTmSORCbI5ELsTmSORCbI5ELsTmSORCbI5ELsTmSORCbM4/DZlOVlgzf0MAAAAASUVORK5CYII=" alt="" />

在项目文件目录,为项目创建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 进行构建:

Windows下构建ASP.NET Core+Code First+Docker

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

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

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

Windows下构建ASP.NET Core+Code First+Docker

Windows下构建ASP.NET Core+Code First+Docker

结束语

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

作者:Code4Thought 成员 Flynn Shu

上一篇:Nodejs使用coffeescript编写的用户注册/登陆代码(MySQL)


下一篇:redis成长之路——(七)