Abp mysql guid_ABP实践(3)-ASP.NET Core 2.x版本(从创建实体到输出api)简单实现商品列表及增删改...

项目基于前两篇文章.

本章创建一个简单版的商品管理后台api,用到EF Core用code fist迁移数据创建数据库.

创建Goods实体

在领域层xxx.Core项目[新建文件夹Goods;文件夹名称和类名称一样后面引用的时候需要Goods.Goods,所以建议文件夹名称最好是不要与类同名]在文件夹下创建Goods.cs实体类

e802ef834c72b17e1f468185ccdaf23d.png

[Table(\"goods\")]public class Goods : AuditedAggregateRoot{///

///商品名称///

[Required]//必填

[StringLength(100)]//限制长度100

public string GoodsName { get; set; }///

///价格///

public decimal Price { get; set; }///

///描述///

public string Describe{ get; set; }///

///剩余数量///

public int SurplusQty { get; set; }///

///构造函数///

///

///

///

///

public Goods(string goodsName, decimal price, string describe,intsurplusQty)

{

GoodsName=goodsName;

Price=price;

Describe=describe;

SurplusQty=surplusQty;

}

}

ABP有两个基本的实体基类: AggregateRoot(领域驱动设计(DDD)的概念之一) 和 Entity,继承AggregateRoot会默认添加审计属性CreationTime,CreatorId

是Goods实体的主键类型可以是int,string等根据自己场景设置

将Goods实体添加到DbContext中

在基础层xxx.EntityFrameworkCore下找到xxxDbContext.cs加入Goods实体对应的DbSet

0791a23e722a82d18677348e9ba2aa81.png

//由于文件夹名称和类文件同名所以需要Goods.Goods不然只需要类名Goods就行了

public DbSet Goods { get; set; }

添加新的Migration并更新数据库

1,打开程序包管理器控制台,默认项目选择Entityframework对应的项目后。执行Add-Migration Add_Goods_Entity,创建迁移

c784f22f59ff1a680b6ac4207f527432.png

2,在程序包管理器控制台,输入Update-Database,回车执行迁移。执行成功后,查看数据库,看是否存在表及初始数据

3f084aa0af787e52b289d69a066919d1.png

执行成功之后刷新数据库查看是否有成功创建表goods

3,给goods表添加几条初始化数据

3.1 在基础层xxx.EntityFrameworkCore下创建Goods初始化数据类DefaultGoodsCreator.cs

f29e4d5941e4c6199076f5572d72ab6c.png

public classDefaultGoodsCreator

{private readonlycrazyDbContext _context;private List GoodsList=GetInitialGoods();publicDefaultGoodsCreator(crazyDbContext context)

{

_context=context;

}private static ListGetInitialGoods()

{return new List{new crazy.Goods.Goods(\"商品1\",100,\"描述1\",10),new crazy.Goods.Goods(\"商品2\",260,\"描述2\",50),new crazy.Goods.Goods(\"商品3\",99,\"描述2\",1),

};

}public voidCreate()

{

CreateGoods();

}///

///循环添加初始数据///

private voidCreateGoods()

{foreach (var goods inGoodsList)

{

AddGoodsIfNotExists(goods);

}

}///

///判断添加不存在的商品数据///

///

private voidAddGoodsIfNotExists(crazy.Goods.Goods goods)

{if (_context.Goods.IgnoreQueryFilters().Any(l => l.GoodsName ==goods.GoodsName))

{return;

}

_context.Goods.Add(goods);

_context.SaveChanges();

}

}

3.2在基础层xxx.EntityFrameworkCore找到文件夹Seed下的SeedHelper.cs插入代码

//Goods初始化数据

new DefaultGoodsCreator(context).Create();

6d395b69930fd78d417c4e9256874945.png

设置crazy.Web.Host为启动项运行项目,运行之后数据库就会生成goods初始化数据.

f1c0d030002e274a03d4c330055f0fba.png

创建应用服务

1在应用服务层xxx.Application创建文件夹Goods>Dto

①添加GoodsDto.cs

8866e4219fd0ed9d16fbef365e61a610.png

fc25235ced3ead3bf0f9594613f04c49.gif

55bda6111a3f4cb337c7eb90de617424.gif

[AutoMapFrom(typeof(Goods))]public class GoodsDto : AuditedEntityDto{///

///商品名称///

public string GoodsName { get; set; }///

///价格///

public decimal Price { get; set; }///

///描述///

public string Describe { get; set; }///

///剩余数量///

public int SurplusQty { get; set; }

}

View Code

[AutoMapFrom(typeof(Goods))]用来创建从Goods类到GoodsDto的AutoMapper映射.使用这种方法.你可以将Goods对象自动转换成GoodsDto对象

②添加CreateUpdateBookDto用于在创建或更新

[AutoMapFrom(typeof(Goods))]public classCreateUpdateGoodsDto : AuditedEntityDto

{///

///商品名称///

[Required]

[StringLength(100)]public string GoodsName { get; set; }///

///价格///

public decimal Price { get; set; }///

///描述///

public string Describe { get; set; }///

///剩余数量///

public int SurplusQty { get; set; } = 999;

}

③在应用服务层的Goods文件夹下创建接口IGoodsAppService.cs

public interfaceIGoodsAppService :

IAsyncCrudAppService< //定义了基础的 CRUD方法:GetAsync, GetListAsync, CreateAsync, UpdateAsync 和 DeleteAsync.如果不需要扩展它,你可以继承空的IApplicationService接口定义你自己的方法

GoodsDto, //展示商品

Guid, //Goods实体的主键

PagedAndSortedResultRequestDto, //获取商品的时候用于分页和排序

CreateUpdateGoodsDto, //创建

CreateUpdateGoodsDto> //更新

{

}

④在应用服务层的Goods文件夹下创建商品服务类GoodsAppService.cs

public classGoodsAppService :

AsyncCrudAppService

CreateUpdateGoodsDto, CreateUpdateGoodsDto>,

IGoodsAppService

{public GoodsAppService(IRepository repository)//注入IRepository自动为Goods创建仓储

: base(repository)

{

}

}

到此就可以运行项目得到如下效果

2fcd604367884f2fe177a7c787b81bfa.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值