• 非关系型数据库来了,CRL快速开发框架升级到版本4


    轮子?,我很任性,我要造不一样的轮子,同时支持关系型和非关系型的框架有没有

    新版数据查询作了些调整,抽象了LabmdaQueryy和DBExtend,升级到版本4,非关系数据库MongoDB被支持了!

    最近又好多人发各种框架,谁的好,用谁的?

    个人意见,想标准和稳定,EF,NH就行了,要个性,选一款好用的轮子吧

    个人开发的框架始终是高级玩具,学习的好东西,不要较真,欢迎下载此高级玩具,猛击底部GITHUB地址

    历史版本3介绍 CRL快速开发框架开源完全转到Github

    当前版本结构更改如下

    一句话描述,非关系型数据库Mongodb能用CRL进行统一管理了,不用再写各种各样的实现

    此功能依赖MongoDB官方驱动MongoDB.Driver

    简单示例

    对象定义MongoDBModel.cs

    public class MongoDBModel:CRL.IModel
        {
            public MongoDBModel()
            {
                //保持唯一
                Id = new Guid();
            }
            public Guid Id
            {
                get;
                set;
            }
            public string OrderId
            {
                get;
                set;
            }
            public int Status
            {
                get;
                set;
            }
        }
    

    管理类实现MongoDBTestManage

        public class MongoDBTestManage : CRL.BaseProvider<MongoDBModel>
        {
            public static MongoDBTestManage Instance
            {
                get { return new MongoDBTestManage(); }
            }
        }
    

    数据连接创建

    CRL.SettingConfig.GetDbAccess = (dbLocation) =>
                {
                        //可按type区分数据库
                        var type2 = dbLocation.ManageType;
                        if (type2 == typeof(Code.MongoDBTestManage))
                        {
                            //实现MongoDB连接
                            return new CoreHelper.MongoDBHelper("mongodb://localhost:27017", "test2");
                        }
                        return WebTest.Code.LocalSqlHelper.TestConnection;
                };

    创建访问对象

    var instance = Code.MongoDBTestManage.Instance;
    

    插入数据

    instance.Add(new Code.MongoDBModel() { OrderId = "1212", Status = DateTime.Now.Second });
    

    函数Count统计

    int count = instance.Count(b => b.Status >= 0);
    

    Group

    var query = instance.GetLambdaQuery();
                //group
                query.GroupBy(b => b.OrderId).Select(b => new { count = b.Status.SUM(), count2 = b.Status.COUNT() });
                var list = query.ToDynamic();
                foreach (var item in list)
                {
                    var a = item.count;
                    var key = item.OrderId;
                }
    

    标准查询

    除了代表SQL特性的语法和函数不支持,其它都支持

                var query2 = instance.GetLambdaQuery();
                query2.Select(b => new { aa = b.Id, bb = b.Status });
                query2.Where(b=>b.Status.In(1,2,3,4)&&b.OrderId.StartsWith("123"));//支持扩展方法
                var result = query2.ToDictionary<Guid, int>();//返回字典
                var result2 = query2.ToDynamic();//返回动态对象
                var result3 = query2.ToList();//返回List<MongoDBModel>
    

    更新删除和之前调用方式保持一致

    由于MongoDB的特性,以下不能实现,调用可能会抛出异常

    • 关联查询
    • 关联删除
    • 关联更新
    • SQL语句查询
    • 事务
    • 存储过程
    • 自动编译
    • 部份SQL函数

    测试用例见开发文档 /page/MongoDB.aspx

    void TestMongoDB()
            {
                //依赖官方驱动MongoDB.Driver
                //MongoDBTest.Test();
                //return;
                var instance = Code.MongoDBTestManage.Instance;
                //插入
                instance.Add(new Code.MongoDBModel() { OrderId = "1212", Status = DateTime.Now.Second });
                //函数Count
                int count = instance.Count(b => b.Status >= 0);
                var query = instance.GetLambdaQuery();
                query.Where(b => b.Status > 10);
                var result3 = query.ToList();//返回List<MongoDBModel>
                //group
                query.GroupBy(b => b.OrderId).Select(b => new { count = b.Status.SUM(), count2 = b.Status.COUNT() });
                var list = query.ToDynamic();
                foreach (var item in list)
                {
                    var a = item.count;
                    var key = item.OrderId;
                }
                //标准查询
                var query2 = instance.GetLambdaQuery();
                query2.Select(b => new { aa = b.Id, bb = b.Status });
                //query2.Where(b=>b.Status.In(1,2,3,4));
                var result = query2.ToDictionary<Guid, int>();//返回字典
                var result2 = query2.ToDynamic();//返回动态对象
    
                //删除
                instance.Delete(b => b.Status == 111);
                //更新
                var item2 = instance.QueryItem(b => b.Status > 0);
                item2.Status = 123;
                instance.Update(item2);
            }
    

      

     项目开源地址:https://github.com/hubro-xx/CRL3

  • 相关阅读:
    SQLDirect 6.5 Source (Delphi 5-10.1 Berlin)
    中国自主X86处理器工艺跃进:国产28nm升级16nm(上海兆芯)
    底层库
    An Overview of Complex Event Processing2
    linux动态库编译和使用
    gulp
    Web前端性能优化
    ECLIPSE JSP TOMCAT 环境搭建
    项目架构mvc+webapi
    HTTP/1.1
  • 原文地址:https://www.cnblogs.com/hubro/p/5689282.html
Copyright © 2020-2023  润新知