.net ORM 开源框架

源码:https://github.com/JohnnyZhang0628/Faster

Faster

基于.net standard 2.0 的ORM框架,更小、更快是作者追求的目标。

邮箱:237183141@qq.com

大小:50kb

特性

1、支持单表的增删改查、分页、批量新增、批量删除。

2、所有查询全部参数化,防止sql注入。

3、支持db first 模式,直接生成model类。code first作者舍弃了。

4、支持IOC,依赖注入。

5、支出dynamic动态类型。

6、所有操作都是以事务进行的。

接口设计模式参考dapper

问题

Q:dapper和faster的区别?

A:dapper是一款很好的ORM框架,作者开始就是用它的。随着需求的改变(根据实体直接反射数据库,所有sql语句参数化查询,db first,ioc等)

dapper已经不能满足我的需求了,所以就出现faster。如果你没有上诉我的这些需求,我推荐你用dapper。如果你需要一些定制化的需求,faster是你

的不二之选。

Example

所有的方法都基于IDbConnection这个接口。

User实体类

    [FasterTable(TableName = "tb_user")] //自动映射表的别名
    public class User
    {

        [FasterIdentity] //自增长ID
        [FasterKey] //设为主键
        public int UserId { get; set; }


        [FasterColumn(ColumnName = "user_name")] //设置列的别名
        [FasterKey] //多个主键
        public string UserName { get; set; } = "zq";

        public string Password { get; set; }

        public string Email { get; set; }

        public string Phone { get; set; }
    }

1、获取实体列表。IEnumerable GetList(this IDbConnection connection, string strWhere = “”, object param = null)

	connection.GetList<User>(" where userid>@id", new { id = 10 })

2、根据主键加载单个实体。T Get(this IDbConnection connection, object param )

	connection.Get<User>(new { UserId = 1, UserName = "张强1" });

3、新增实体。int Add(this IDbConnection connection, object param)

	connection.Add(new User
                {
                    UserName = "张强",
                    Password = "123456",
                    Email = "237183141@qq.com",
                    Phone = "18516328675"
                });

4、批量新增实体。int BulkInsert(this IDbConnection connection, IEnumerable param)

BulkInsert 会生产一条语句,一次执行。这是和Dapper的区别。Dapper会遍历一次,执行一次。

			//批量新增
            List<User> userList = new List<User>();
            for (int i = 0; i < 10000; i++)
            {
                userList.Add(new User
                {
                    UserName = "张强" + (i + 1),
                    Password = "123456",
                    Email = "237183141@qq.com",
                    Phone = "18516328675"
                });
            }
            connection.BulkInsert(userList);
			// 反射生产的sql语句,然后执行一次,大大提升了批量插入的效率。
			insert into tb_user(user_name,password,email,phone)values(@username0,@password0,@email0,@phone0);
			insert into tb_user(user_name,password,email,phone)values(@username1,@password1,@email1,@phone1);
			insert into tb_user(user_name,password,email,phone)values(@username2,@password2,@email2,@phone2);
			.........
			insert into tb_user(user_name,password,email,phone)values(@username9999,@password9999,@email9999,@phone9999);

5、根据主键更新实体。int Update(this IDbConnection connection, object param)

	connection.Update<User>(new { UserId = 1, UserName = "张强1" });

6、根据主键删除实体。int Remove(this IDbConnection connection,object param)

	connection.Remove<User>(new { UserId = 1, UserName = "张强1" });

7、根据主键批量删除实体。int BulkRemove(this IDbConnection connection, IEnumerable param)

类似批量新增,生成一条语句,提高效率。

			List<User> userList = new List<User>();
            for (int i = 0; i < 100; i++)
            {
                userList.Add(new User
                {
                    UserName = "张强" + (i + 1),
                    Password = "123456",
                    Email = "237183141@qq.com",
                    Phone = "18516328675"
                });
            }
	connection.BulkRemove(userList);

8、分页查询。Tuple<int, IEnumerable> GetPageList(this IDbConnection connection, string order, string strWhere = “”, object param = null, int pageNum = 1, int PageSize = 10)

	var result=connection.GetPageList<User>("userid,username desc"," where userid>@id",new {id=10},2,20);
	//当前符合条件的记录数
	int count=result.Item1;
	// 第21条-40条 实体列表
	var list=result.Item2;

执行sql语句

1、获取第一行第一列的结果。T GetValue(this IDbConnection connection, string strSql, object param = null)

	connection.GetValue<int>("select count(*) from tb_user where userid>@userid",new {userid=10});

2、获取数据集。IEnumerable ExecuteQuery(this IDbConnection connection, string strSql, object param = null)

	connection.ExecuteQuery<User>("select * from tb_user where userid>@userid",new {userid=10});

3、获取动态类型数据集。IEnumerable ExecuteQueryDynamic(this IDbConnection connection, string strSql, object param = null)

	connection.ExecuteQueryDynamic("select * from tb_user where userid>@userid",new {userid=10});

4、执行修改命令语句。int ExecuteNonQuery(this IDbConnection connection, string strSql, object param = null)

	connection.ExecuteNonQuery("delete from tb_user where userid>@userid",new {userid=10});

5、执行无返回值的存储过程。int ExecuteNonQuerySP(this IDbConnection connection, string storeProcedure, IDbDataParameter[] parameters = null)

            IDbDataParameter[] parameters =
            {
                new SqlParameter("@user_id",2)
            };
            query = _dbConnection.ExecuteQuerySP<User>("sp_test", parameters);

			// 获取返回值
            IDbDataParameter[]  outparameters =
            {
                new SqlParameter { ParameterName = "@count",DbType=DbType.Int32, Direction = ParameterDirection.Output }
            };

            _dbConnection.ExecuteNonQuerySP("sp_test_out", outparameters);


            var count = outparameters[0].Value;

6、执行查询存储过程。IEnumerable ExecuteQuerySP(this IDbConnection connection, string storeProcedure, IDbDataParameter[] parameters = null)

	connection.ExecuteQuerySP<User>("sp_test_no_params");

DB First 生成Model类 void CreateModels(this IDbConnection connection, string nameSpace = “Model”)

connection.CreateModels();

IOC 容易依赖注入

            //1、获取容器
            Container container = new Container();
            //2、注册类型
            container.RegisterType<IUserRepository, UserService>();
            //3、创建实例
            user = container.Resolve<IUserRepository>();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
什么是Nancy呢?如果你学习过Ruby的话,就会知道Ruby中有个框架叫做Sinatra,Nancy就是Sinatra的.Net版本。如果你感觉微软的MVC过于笨重、过于繁琐,那么Nancy可能就是你苦苦寻找的东西。Nancy是一个轻量级的独立的框架,下面是官网的一些介绍:Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方式,并提供一个super-duper-happy-path所有交互。Nancy 设计用于处理  DELETE ,  GET ,  HEAD ,  OPTIONS ,  POST ,  PUT   和 PATCH  等请求方法,并提供简单优雅的 DSL 以返回响应。Nancy和Asp.net MVC原理相似,但有自己的一套路由机制,在使用上更加易用,可以用Nancy快速开发一些网站。Nancy并不依赖任何现有的框架,所以他可以运行在任何平台上面。官方网站 http://nancyfx.org/ 更详细的介绍参见 http://blog.spinthemoose.com/2011/07/18/nancy-a-micro-web-framework-for-net/ 顺便介绍个使用Nancy 做的Quartz.net的web控制台 https://quartznetwebconsole.codeplex.com/ 参考文章:使用Nancy和Simple.Data两个轻量级的框架打造一个分布式开发系统(一)Frictionless .NET Web App Development with NancyFrictionless .NET Web App Development with Nancy Part II - Introducing a View EngineFrictionless .NET Web App Development with Nancy Part III - Introducing MongoDBFrictionless .NET Web App Development with Nancy Part IV – Hosting Slides from ANUG talk on Nancy扩展NoteService,支持NancyFx用Nancy和Simple.Data创建一个图片博客 第一部分:开始一个工程用Nancy和Simple.Data创建一个图片博客 第二部分:定义routes用Nancy和Simple.Data创建一个图片博客 第三部分:渲染一些ViewsIntegrating Nancy with protobuf-netBuild Simple Web UIs with the Nancy Framework轻量级MVC框架:Nancy学习 标签:web框架
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值