CRL快速開發框架系列教程十二(MongoDB支持)

本系列目錄

  1. CRL快速開發框架系列教程一(Code First數據表不需再關心)
  2. CRL快速開發框架系列教程二(基於Lambda表達式查詢)
  3. CRL快速開發框架系列教程三(更新數據)
  4. CRL快速開發框架系列教程四(刪除數據)
  5. CRL快速開發框架系列教程五(使用緩存)
  6. CRL快速開發框架系列教程六(分佈式緩存解決方案)
  7. CRL快速開發框架系列教程七(使用事務)
  8. CRL快速開發框架系列教程八(使用CRL.Package)
  9. CRL快速開發框架系列教程九(導入/導出數據)
  10. CRL快速開發框架系列教程十(導出對象結構)
  11. CRL快速開發框架系列教程十一(大數據分庫分表解決方案)
  12. CRL快速開發框架系列教程十二(MongoDB支持)
  13. CRL快速開發框架系列教程十三(嵌套查詢)

 正文

因爲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函數

由於驅動的問題,匿名對象結果沒法實現,4.2新增的功能不被支持

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章