这里我们用三层架构搭建一个连接MySql的ASP.netCore模板的webApi项目
右键解决方案>新建项目>
选择Web>ASP.NET Core Web应用程序(.NET Core)
选择Web API
此时的目录结构:
右键添加>新建项目>.Net Core类库
添加后的目录结构
BaseEntity:
- using System;
- using System.Collections.Generic;
- using System.ComponentModel.DataAnnotations;
- using System.Runtime.Serialization;
- using System.Text;
- namespace Entity.Core {
- /// <summary>
- /// DB表基础属性
- /// </summary>
- public abstract class BaseEntity < T > {
- public BaseEntity() {
- CreteTime = DateTime.Now;
- }
- /// <summary>
- /// 主键Id
- /// </summary>
- [DataMember][Key] public T Id {
- get;
- set;
- }
- /// <summary>
- /// DB版号,Mysql详情参考;http://www.cnblogs.com/shanyou/p/6241612.html
- /// </summary>
- //[Timestamp]//Mysql不允许byte[]类型上标记TimeStamp/RowVersion,这里使用DateTime类型配合标记ConcurrencyCheck达到并发控制
- [ConcurrencyCheck] public DateTime RowVersion {
- get;
- set;
- }
- /// <summary>
- /// 创建时间
- /// </summary>
- public DateTime CreteTime {
- get;
- set;
- }
- }
- }
Product:
- using Entity.Core;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel.DataAnnotations;
- using System.Text;
- namespace Entity.Table
- {
- /// <summary>
- /// 商品类
- /// </summary>
- public class Product : BaseEntity<long>
- {
- /// <summary>
- /// 名称
- /// </summary>
- [StringLength(20)]
- [Required]
- public string Name { get; set; }
- /// <summary>
- /// 描述
- /// </summary>
- [StringLength(500)]
- [Required]
- public string Description { get; set; }
- /// <summary>
- /// 类别
- /// </summary>
- [Range(1, int.MaxValue)]
- public int Category { get; set; }
- /// <summary>
- /// 原价
- /// </summary>
- [Required]
- public decimal Price { get; set; }
- /// <summary>
- /// 现价
- /// </summary>
- public decimal Discount { get; set; }
- }
- }
右键添加>新建项目>.NET Core 类库
添加引用:
Microsoft.EntityFrameworkCore(也可加入Microsoft.AspNetCore.All,但会有用不到的功能造成浪费)
Microsoft.EntityFrameworkCore.Tools(迁移支持)
Pomelo.EntityFrameworkCore.MySql(Mysql支持)具体使用细则,请参考:Pomelo.EntityFrameworkCore.MySql使用细则
- <Project Sdk="Microsoft.NET.Sdk">
- <PropertyGroup>
- <TargetFramework>
- netcoreapp2.0
- </TargetFramework>
- </PropertyGroup>
- <ItemGroup>
- <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.0"
- />
- <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.0.0-rtm-10062"
- />
- <!--迁移支持必备-->
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0"
- PrivateAssets="All" />
- </ItemGroup>
- <ItemGroup>
- <!--迁移支持必备-->
- <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
- Version="2.0.0" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\Entity\Entity.csproj" />
- </ItemGroup>
- </Project>
- using Entity.Table;
- using Microsoft.EntityFrameworkCore;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace DAL {
- public class ProductContext: DbContext {
- //https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/complex-data-model
- public ProductContext(DbContextOptions < ProductContext > options) : base(options) {
- //在此可对数据库连接字符串做加解密操作
- }
- public DbSet < Product > Courses {
- get;
- set;
- }
- protected override void OnModelCreating(ModelBuilder modelBuilder) {
- base.OnModelCreating(modelBuilder);
- }
- }
- }
ASP.Net Core API项目中引用刚创建的DAL类库
右键添加>新建项目>.NetCore 类库
添加引用:
添加Entity和DAL引用,其次再添加第三方数据仓储Microsoft.EntityFrameworkCore.UnitOfWork(最新)
- <ItemGroup>
- <PackageReference Include="Microsoft.EntityFrameworkCore.UnitOfWork" Version="2.0.1"
- />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\DAL\DAL.csproj" />
- <ProjectReference Include="..\Entity\Entity.csproj" />
- </ItemGroup>
文件目录如下:
IProductService:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace Service.ProductService
- {
- public interface IProductService
- {
- string Test();
- }
- }
ProductService:
- using Entity.Table;
- using Microsoft.EntityFrameworkCore;
- namespace Service.ProductService
- {
- public class ProductService : IProductService
- {
- private readonly IUnitOfWork _unitOfWork;
- public ProductService(IUnitOfWork unitOfWork)
- {
- _unitOfWork = unitOfWork;
- }
- public string Test()
- {
- var repo = _unitOfWork.GetRepository<Product>();
- repo.Insert(new Product
- {
- Category = 1,
- Description = "此商品为澳洲代购,买不了吃亏买不了上当",
- Discount = (decimal)899.21,
- Price = (decimal)98.2,
- Name = "澳洲袋数粉",
- });
- _unitOfWork.SaveChanges();//提交到数据库
- var result = repo.GetFirstOrDefault()?.Name ?? string.Empty;
- return result;
- }
- }
- }
ASP.Net Core API添加刚创建的Service类库引用
- <ItemGroup>
- <ProjectReference Include="..\DAL\DAL.csproj" />
- <ProjectReference Include="..\Service\Service.csproj" />
- </ItemGroup>
- using System.Collections.Generic;
- using Microsoft.AspNetCore.Mvc;
- using Service.ProductService;
- namespace ASP.Net_Core_API.Controllers
- {
- [Route("api/[controller]")]
- public class ValuesController : Controller
- {
- private IProductService _productService;
- public ValuesController(IProductService productService)
- {
- _productService = productService;
- }
- // GET api/values
- [HttpGet]
- public IEnumerable<string> Get()
- {
- var result = _productService.Test();
- return new string[] { "value1", result };
- }
- }
- }
Startup文件中加入Mysql支持和对应的需要的注入的service还有UnitOfWork的支持
完整文件如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Logging;
- using Microsoft.Extensions.Options;
- using Microsoft.EntityFrameworkCore;
- using Entity.Table;
- using DAL;
- using Service.ProductService;
- namespace ASP.Net_Core_API
- {
- public class Startup
- {
- public Startup(IConfiguration configuration)
- {
- Configuration = configuration;
- }
- public IConfiguration Configuration { get; }
- // This method gets called by the runtime. Use this method to add services to the container.
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddDbContext<ProductContext>(options =>
- options.UseMySql(Configuration.GetConnectionString("MySqlConnection")));//添加Mysql支持
- services.AddUnitOfWork<ProductContext>();//添加UnitOfWork支持
- services.AddScoped(typeof(IProductService), typeof(ProductService));//用ASP.NET Core自带依赖注入(DI)注入使用的类
- services.AddMvc();
- }
- // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- app.UseMvc();
- }
- }
- }
- {
- "ConnectionStrings": {
- "MySqlConnection": "Server=localhost;database=NetCore_WebAPI-Mysql;uid=root;pwd=111111;"
- },
- "Logging": {
- "IncludeScopes": false,
- "Debug": {
- "LogLevel": {
- "Default": "Warning"
- }
- },
- "Console": {
- "LogLevel": {
- "Default": "Warning"
- }
- }
- }
- }
打开程序包管理器控制台:工具>NuGet包管理器>程序包管理器控制台,默认项目选中包含了DbCOntext的程序集,这里是DAL,程序包源选择全部
输入:
完整操作如下
Tip:如果是非第一次迁移,就不能再输入PM>add-migration init,而是输入:
PM>add-migration "对本次迁移的说明"
例如,本次对Entity的某张表添加了Name属性.迁移时输入PM>add-migration AddName
输入以上待执行后,依旧输入以下即可
PM>update-database
会发现在DAL程序家下成功生成了以下目录
再打开数据库成功依据实体Entity生成了Product表
成功Run通,奖励个鸡腿压压惊
专案下载链接:Demo
来源: http://www.cnblogs.com/xiaoliangge/p/7543773.html