dommel mysql_.Net Core AA.FrameWork应用框架介绍

adbd4ab1cf5de65f287a78282e921e84.png

开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我。

AA.FrameWork 是基于.NET core流行的开源类库创建的基础应用框架。

框架代码图如:

c45c7df84562db3158a7c6168089a9eb.png

源代码github地址:https://github.com/ChengLab/AAFrameWork

nuget管理中,搜索前缀名称 AA 即可如图

bb0b1f4f6a699542307d784de43e062e.png

Nuget Packages

Packagenugetdescription

AA.Dapper

基于dapper,Dapper-FluentMap 开发 , 支持工作单元、仓储模式和原生dapper的操作

AA.Log4Net

基于Log4net开发,提供常用的日志操作类

AA.FrameWork

基础框架

AA.Redis

基于StackExchange.Redis开发,提供各种redis操作和基于redis的分布式锁

AA.AutoMapper

基于AutoMapper开发,对象映射

AA.ServiceBus

基于MassTransit开发的服务总线 ;很方便的应用在event bus 和 publish/subscribe 场景

AA.AspNetCore

aspnetcore常用类集合

AA.Dapper用法

实体映射配置

使用DommelEntityMap类映射属性名称。创建一个派生类,在构造函数中设置Map方法,可指定某个属性映射到数据库列名

public class UserInfoMap : DommelEntityMap

{

public UserInfoMap()

{

ToTable("Sys_UserInfo");//映射具体的表名

Map(p => p.SysNo).IsKey();//指定主键 ,IsIdentity是否自增

Map(p=>p.GmtCreate).ToColumn("GmtCreateDate"); //属性名和数据库列名 可以不同

Map(p=>p.LastLoginDate).Ignore();//一些计算属性,可以忽略不需要跟数据库列进行映射

}

}

使用MapConfiguration.Init方法,把映射类初始化,后续就可以使用了

public static void InitMapCfgs()

{

var fluentMapconfig = new List>();

fluentMapconfig.Add(cfg =>

{

cfg.AddMap(new UserInfoMap());

});

MapConfiguration.Init(fluentMapconfig);

}

开始使用AA.Dapper

使用DapperContext设置数据库连接和数据库类型是sqlserver还是mysql

public class AADapperContext : DapperContext

{

public AADapperContext() : base(new NameValueCollection()

{

["aa.dataSource.AaCenter.connectionString"] = "Data Source =.; Initial Catalog = AaCenter;User ID = sa; Password = 123;",

["aa.dataSource.AaCenter.provider"] = "SqlServer"

})

{ }

}

仓储包含了大部分的操作,同时支持Async操作

IDapperRepository userInfoRepository = new DapperRepository();

插入实体

var user = new UserInfo()

{

UserName = "chengTian",

RealName = "成天",

GmtCreate = DateTime.Now,

GmtModified = DateTime.Now

};

var result = userInfoRepository.Insert(user);

修改实体

var user = userInfoRepository.Get(1);

user.GmtModified = DateTime.Now;

var result = userInfoRepository.Update(user);

获取实体

var user = userInfoRepository.Get(1);//By 主键

var users = userInfoRepository.GetAll();//所有

var users = userInfoRepository.Select(p => p.UserName == "chengTian");//谓词

删除实体

var user = userInfoRepository.Get(1);

var result = userInfoRepository.Delete(user);

支持Dapper原生操作

操作基本的封装都是单表的操作,可以满足一部分业务开发,有些业务场景编写sql还是比较合适的比如报表和一些复杂的查询,推荐使用原生dapper的操作

public class UserInfoRepository : DapperRepository, IUserInfoRepository

{

private readonly IDapperContext _dapperContext;

public UserInfoRepository(IDapperContext context)

{

_dapperContext = context;

}

public IEnumerable QueryAll()

{

var result = _dapperContext.DataBase.Query("SELECT * from [Sys_UserInfo]");//实例

return result;

}

}

AA.Log4Net 用法

log4net.config 配置,并将log4net.config的属性->复制到输出目录->设置为->始终复制

Log4NetLogger.Use("配置文件名或者路径+配置文件名"); 例如:log4net.config文件在根目录下,Log4NetLogger.Use("log4net.config");如果在自定义文件中;例如config/log4net.config 则Log4NetLogger.Use("config/log4net.config")

ILog log= Logger.Get(typeof(类)); log.Debug("example");

AA.ServiceBus 用法

生产者(事件和命令两种类型)

实例化bus

//事件

IBusControl busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)

.BuildEventProducer();

//命令

ISendEndpoint busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)

.BuildCommandProducer(queueName);

实例化bus之后可以使用发送和发布两个方法

//命令

TaskUtil.Await(busControl.Send(new

{

Id = 10

}));

//事件

TaskUtil.Await(busControl.Publish(new

{

Id = 1

}));

消费者

[Fact]

public void TestConsumer()

{

Log4NetLogger.Use("Log4Net/log4net.config");

string rabbitMqUri = "rabbitmq://localhost:5672";

string rabbitMqUserName = "";

string rabbitMqPassword = "";

string queueName = "order.queue";

var busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)

.RegisterConsumer(queueName)//注册命令消费者

.RegisterConsumer(null)//注册事件消费者

.Build();

busControl.Start();

}

定义消费者需要实现接口IConsumer

public class OrderSubmittedEventConsumer : IConsumer

{

public async Task Consume(ConsumeContext context)

{

var @event = context.Message;

var result = $"OrderSubmittedEvent {@event.Id.ToString()}";

ILog log = Logger.Get(typeof(OrderSubmittedEventConsumer));

log.Debug(result);

//do somethings...

}

}

public class SubmitOrderCommandConsumer : IConsumer

{

public async Task Consume(ConsumeContext context)

{

var command = context.Message;

var result = $"CreateFooCommand {command.Id.ToString()}";

ILog log = Logger.Get(typeof(SubmitOrderCommandConsumer));

log.Debug(result);

//do somethings...

}

}

AA.AutoMapper用法

实现IMapperConfiguration接口,创建映射规则配置

public class WebMapperConfigurations : IMapperConfiguration

{

public int Order { get { return 0; } }

public Action GetConfiguration()

{

Action action = cfg =>

{

cfg.CreateMap();

};

return action;

}

}

在程序startup调用配置

var mapperConfig = new WebMapperConfigurations();

AutoMapperConfiguration.Init(new List> { mapperConfig.GetConfiguration() });

ObjectMapping.ObjectMapManager.ObjectMapper = new AutoMapperObjectMapper();

利用扩展方法MapTo执行映射

[Fact]

public void TestMap()

{

//init

Init();

UserVm userVm = new UserVm { Id = 1, Name = "成天" ,Remark="微信公众号:dotNet知音"};

var userDto = userVm.MapTo();

//var userDto2 = userVm.MapTo();

}

后面也会提供基于AA框架的应用实例,有问题可以联系我,一起交流和成长。

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[.Net Core AA.FrameWork应用框架介绍]http://www.zyiz.net/tech/detail-92923.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值