项目基于前两篇文章.
本章创建一个简单版的商品管理后台api,用到EF Core用code fist迁移数据创建数据库.
创建Goods实体
在领域层xxx.Core项目[新建文件夹Goods;文件夹名称和类名称一样后面引用的时候需要Goods.Goods,所以建议文件夹名称最好是不要与类同名]在文件夹下创建Goods.cs实体类
[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
//由于文件夹名称和类文件同名所以需要Goods.Goods不然只需要类名Goods就行了
public DbSet Goods { get; set; }
添加新的Migration并更新数据库
1,打开程序包管理器控制台,默认项目选择Entityframework对应的项目后。执行Add-Migration Add_Goods_Entity,创建迁移
2,在程序包管理器控制台,输入Update-Database,回车执行迁移。执行成功后,查看数据库,看是否存在表及初始数据
执行成功之后刷新数据库查看是否有成功创建表goods
3,给goods表添加几条初始化数据
3.1 在基础层xxx.EntityFrameworkCore下创建Goods初始化数据类DefaultGoodsCreator.cs
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();
设置crazy.Web.Host为启动项运行项目,运行之后数据库就会生成goods初始化数据.
创建应用服务
1在应用服务层xxx.Application创建文件夹Goods>Dto
①添加GoodsDto.cs
[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)
{
}
}
到此就可以运行项目得到如下效果