.NetCore上MongoDB的ORM框架MongoDB.Entities的简单用法

这个MongoDB.Entities是一种访问MongoDB的ORM框架,写起来优雅,实在是太优雅了,和SqlSugar或者EF之类的框架一样可以使用linq。文档地址

首先在nuget安装MongoDB.Entities
项目启动的时候初始化

await DB.InitAsync(_mongoSetting.Database.Name, MongoClientSettings.FromConnectionString($"mongodb://{_mongoSetting.Database.UserName}:{_mongoSetting.Database.Password}@{_mongoSetting.Database.Address}/{_mongoSetting.Database.Name}"));

或者调这个

await DB.InitAsync("DatabaseName","127.0.0.1",27017);

然后实体类如下定义,需要注意的是MongoDB的时间是UTC,需要在getset方法做一个转换,不然差着8小时。

using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Entities;
using System;

namespace MyApp.Entity
{
    /// <summary>
    /// 实体类
    /// </summary>
    [Collection("TestEntity")] //这里面就是集合名称,类似sql里面的表名
    public class TestEntity : IEntity, ICreatedOn, IModifiedOn
    {
		/// <summary>
        /// 主键GUID
        /// </summary>
        [BsonId]
        public virtual string ID { get; set; }

        /// <summary>
        /// 创建时间
        /// 写入时间为世界时间,需转换为本地时间
        /// </summary>
        private DateTime createdOn;
        public virtual DateTime CreatedOn
        {
            get { return createdOn.ToLocalTime(); }
            set { createdOn = value.ToUniversalTime(); }
        }
        
        /// <summary>
        /// 更新时间
        /// 写入时间为世界时间,需转换为本地时间
        /// </summary>
        private DateTime modifiedOn;
        public virtual DateTime ModifiedOn
        {
            get { return modifiedOn.ToLocalTime(); }
            set { modifiedOn = value.ToUniversalTime(); }
        }
    }
}

有了实体类以后只要调一下ORM的插入方法就会根据实体的属性生成MongoDB的表字段信息了,类似SqlSugar里面那种CodeFirst模式根据实体生成数据库表。
增删改如下,直接用linq操作,和EF或者Sqlsugar之类的ORM框架类似的

//增
await DB.SaveAsync(entity);

//直接传ID删除
await DB.DeleteAsync<TestEntity>(id);
//按条件删除
await DB.DeleteAsync<TestEntity>(c=>c.ID == id);

//修改整个实体
await DB.Update(entity).ExecuteAsync();

//修改指定字段
await DB.Update<TestEntity>()
    .Match(c => c.ID == id)
    .Modify(c => c.Name, "测试名称")
    .Modify(c => c.Title, "测试标题")
    .ExecuteAsync();

//查询指定数据
var entity = await DB.Find<TestEntity>()
                     .Match(c => c.ID == id)
                     .ExecuteFirstAsync();

分页查询如下

//分页查询数据
Expression<Func<TestEntity, bool>> tmpWhere = p => p.IsDeleted == false;//构造查询条件
var page = 1;
var rows = 10;
//分页数据列表
var tmpResult = await DB.Find<T>()
                        .Match(tmpWhere)
                        .Sort(p => p.CreatedOn, Order.Descending)//排序
                        .Skip((page - 1) * rows)
                        .Limit(rows)
                        .ExecuteAsync();
//符合条件的数据总数
var total = await DB.Queryable<T>()
                       .Where(tmpWhere)
                       .CountAsync();

另外查询时可以指定使用的索引,使用Option()

var tmpResult = await DB.Find<T>()
                        .Match(tmpWhere)
                        .Sort(p => p.CreatedOn, Order.Descending)//排序
                    	.Option(o => o.Hint = hint)//指定索引,这里的hint就是索引名称
                        .Skip((page - 1) * rows)
                        .Limit(rows)
                        .ExecuteAsync();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值