最为一名越过菜鸟之后的开发,需要做接口开发。下面做一个纯粹的接口编程的实例demo,仅仅是一个webapi接口的抽象。
下面是代码接口,AbsEFWork是webapi,BaseEntityFramework是一个接口库。
【资料图】
先介绍一下webapi的实现,代码是从底层往上层写的,阅读代码的习惯应该是自上向下。
public class ProductController : CustomController{ public ProductController(IEFCoreService efCoreService) : base(efCoreService) { } }
控制器代码很简单的实现了CustomController,数据载体是Product。
using BaseEntityFramework.Implementations;using BaseEntityFramework.Implementations.Entitys;using BaseEntityFramework.IService;using Microsoft.EntityFrameworkCore;namespace BaseEntityFramework{ public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddDbContext(options => options.UseInMemoryDatabase("memorydb")); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddScoped , EFCoreProductService>(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); } }}
Program启动程序需要实现IEFCoreService的注入,以及ProductDbContext 的内存实现。
这样就可以启动一个swagger
对于product数据存储的具体实现,实体类product和dbcontext必须要自己去实现它。
public class Product:IEntity { [Key] public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } [Column(TypeName = "decimal(28,16)")] public decimal Price { get; set; } }
using BaseEntityFramework.Implementations.Entitys;using Microsoft.EntityFrameworkCore;namespace BaseEntityFramework.Implementations{ public class ProductDbContext:DbContext { public ProductDbContext(DbContextOptionsdbContextOptions):base(dbContextOptions) { } public DbSet Products { get; set; } }}
查看上面的控制器代码,有注入IEFCoreService
using BaseEntityFramework.Implementations.Entitys;using BaseEntityFramework.IService;using BaseEntityFramework.Models;using Microsoft.EntityFrameworkCore;using System.Linq.Expressions;namespace BaseEntityFramework.Implementations{ public class EFCoreProductService : IEFCoreService{ private readonly ProductDbContext _dbContext; public EFCoreProductService(ProductDbContext productDbContext) { _dbContext = productDbContext; } public async Task Add(Product entity) { _dbContext.Products.Add(entity); var result = await _dbContext.SaveChangesAsync(); return result != 0; } public Task Delete(Product entity) { throw new NotImplementedException(); } public async Task > GetAll() { var result =await _dbContext.Products.ToListAsync(); return result; } public Task GetEntity(Expression > expression) { throw new NotImplementedException(); } public async Task > GetList(Expression > expression) { var result = await _dbContext.Products.Where(expression).ToListAsync(); return result.AsReadOnly(); } public Task > GetPageResult (PageInput pagInput) where Req : new() { throw new NotImplementedException(); } public Task Update(Product entity) { throw new NotImplementedException(); } }}
上面的代码很简单易懂,最大的好处就是可以复用。实体类和 dbcontext越多这个简简单单的结构就越是有用。
BaseEntityFramework的核心逻辑就是把业务代码做了抽象,做了一个统一的模板,不管 是从那方便说都只有好处。而且作为开发只关心自己的业务代码这一块。
public interface IEFCoreServicewhere T:IEntity { Task Add(T entity) ; Task Delete(T entity); Task Update(T entity); Task > GetList(Expression > expression) ; Task > GetPageResult (PageInput pagInput) where Req:new(); Task GetEntity(Expression > expression); Task > GetAll(); }
以上的实例只是一个简单的demo,项目中需要做框架的话这或许是一个开始,需要做的远远不止这些。
源代码:
liuzhixin405/AbsEFWork (github.com)
杭州焕颜医疗美容医院是杭州当地本土的一家美容医院,成立时间也是比较久的,至今已经有将近十多年的历史了,它是从国外学习的进口技术,设备
江阴银行(002807)04月18日在投资者关系平台上答复了投资者关心的问题。投资者:央行取消靠档计息政策,对公司经营有什么影响?江阴银行董秘:
春暖花开去旅行,浙江台州藏神仙居所,有六大奇观众多网红打卡点
01:00齐鲁网·闪电新闻4月18日讯天气渐暖,瓜果飘香。在潍坊市坊子区黄旗堡街道西门口东村的大棚内,头茬羊角蜜已成熟
今天来聊聊关于哺乳期多长时间可以辞退,哺乳期多长时间的文章,现在就为大家来简单介绍下哺乳期多长时间可以辞退,哺乳期多长时
1、想要去除额头皱纹,求美者可以选择注射除皱针、局部软组织填充、手术等方法,根据额头皱纹的不同情况,以及额头皱纹的皮肤弹
买房有质量问题可以退房,只要房屋质量问题严重影响正常居住使用的,购房者就可以退房。如果发现房屋存在质量问题的,购房者可以要求开发商进
中国网是国务院新闻办公室领导,中国外文出版发行事业局管理的国家重点新闻网站。本网通过10个语种11个文版,24小时对外发布信息,是中国进行
大河报·豫视频记者陈甜甜张晶晶4月18日,河南省2023年度“4·23”世界读书日系列活动启动。为深入推进书香河南建设,加强优秀出版物宣传推广
1、定点爬坡时,先把车保险杠和停车线停垂直,坐在车上看着停车线的左边,眼睛和停车线是一条直线。然后,再在车的门边上找一点和这条直线重合
X 关闭
郑州昨天新增确诊病例11例,累计报告确诊病例103例
郑州:各核酸检测采样点开辟学生绿色通道
为何持续多轮做核酸检测 河南疾控专家解释
驻马店:关于依法严厉打击涉疫情网络谣言等违法信息的通告
郑州本轮累计报告103例本土确诊病例 均为普通型或轻型
郑州第五轮9区全员核酸检测已检724.9万人,已确诊5例
X 关闭