概述
废话不说直接上代码;
![](http://file2.kaopuke.com:8081/files_image/2022102011/c15b78d332c3ef93cc749ac37626262d-0.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/c15b78d332c3ef93cc749ac37626262d-1.gif)
using MongoDB.Bson.Serialization.Attributes;namespace XL.Core.MongoDB
{public interface IEntity<TKey>{/// <summary>/// 主键/// </summary> [BsonId]
TKey Id { get; set; }
}
}
登录后复制
![](http://file2.kaopuke.com:8081/files_image/2022102011/bbaf8509b9f2780de22b59138a4a869c-2.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/bbaf8509b9f2780de22b59138a4a869c-3.gif)
[BsonIgnoreExtraElements(Inherited = true)]public abstract class Entity : IEntity<string>{/// <summary>/// 主键/// </summary> [BsonRepresentation(BsonType.ObjectId)]public virtual string Id { get; set; }
}
登录后复制
![](http://file2.kaopuke.com:8081/files_image/2022102011/bbaf8509b9f2780de22b59138a4a869c-4.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/bbaf8509b9f2780de22b59138a4a869c-5.gif)
public interface IRepository<T, in TKey> : IQueryable<T> where T : IEntity<TKey>{#region Fileds/// <summary>/// MongoDB表/// </summary>IMongoCollection<T> DbSet { get; }/// <summary>/// MongoDB库/// </summary>IMongoDatabase DbContext { get; }#endregion#region Find/// <summary>/// 根据主键获取对象/// </summary>/// <param name="id"></param>/// <returns></returns> T GetById(TKey id);/// <summary>/// 获取对象/// </summary>/// <param name="predicate"></param>/// <returns></returns>IEnumerable<T> Get(Expression<Func<T, bool>> predicate);/// <summary>/// 获取对象/// </summary>/// <param name="predicate"></param>/// <param name="cancellationToken"></param>/// <returns></returns>Task<IEnumerable<T>> GetAsync(Expression<Func<T, bool>> predicate,
CancellationToken cancellationToken = default(CancellationToken));#endregion#region Insert/// <summary>/// 插入文档/// </summary>/// <param name="entity"></param>/// <returns></returns> T Insert(T entity);/// <summary>/// 异步插入文档/// </summary>/// <param name="entity"></param>/// <param name="cancellationToken"></param>/// <returns></returns>Task InsertAsync(T entity, CancellationToken cancellationToken = default(CancellationToken));/// <summary>/// Adds the new entities in the repository./// </summary>/// <param name="entities">The entities of type T.</param>void Insert(IEnumerable<T> entities);/// <summary>/// 插入文档/// </summary>/// <param name="entities"></param>/// <param name="cancellationToken"></param>/// <returns></returns>Task InsertAsync(IEnumerable<T> entities, CancellationToken cancellationToken = default(CancellationToken));#endregion#region Update/// <summary>/// 更新文档/// </summary>/// <param name="entity"></param>/// <returns></returns> UpdateResult Update(T entity);/// <summary>/// 异步更新文档/// </summary>/// <param name="entity"></param>/// <param name="cancellationToken"></param>/// <returns></returns>Task<UpdateResult> UpdateAsync(T entity, CancellationToken cancellationToken = default(CancellationToken));#endregion#region Delete/// <summary>/// 根据主键ID/// </summary>/// <param name="id"></param>/// <returns></returns> T Delete(TKey id);/// <summary>/// 异步根据ID删除文档/// </summary>/// <param name="id"></param>/// <param name="cancellationToken"></param>/// <returns></returns>Task<T> DeleteAsync(TKey id, CancellationToken cancellationToken = default(CancellationToken));/// <summary>/// 异步删除/// </summary>/// <param name="predicate"></param>/// <param name="cancellationToken"></param>/// <returns></returns>Task<DeleteResult> DeleteAsync(Expression<Func<T, bool>> predicate,
CancellationToken cancellationToken = default(CancellationToken));/// <summary>/// 删除/// </summary>/// <param name="predicate"></param>/// <returns></returns>DeleteResult Delete(Expression<Func<T, bool>> predicate);#endregion#region Other/// <summary>/// 计数/// </summary>/// <param name="predicate"></param>/// <returns></returns>long Count(Expression<Func<T, bool>> predicate);/// <summary>/// 计数/// </summary>/// <param name="predicate"></param>/// <param name="cancellationToken"></param>/// <returns></returns>Task<long> CountAsync(Expression<Func<T, bool>> predicate,
CancellationToken cancellationToken = new CancellationToken());/// <summary>/// 是否存在/// </summary>/// <param name="predicate"></param>/// <returns></returns>bool Exists(Expression<Func<T, bool>> predicate);#endregion#region Query/// <summary>/// 分页/// 注:只适合单属性排序/// </summary>/// <param name="predicate"></param>/// <param name="sortBy"></param>/// <param name="pageSize"></param>/// <param name="pageIndex"></param>/// <returns></returns>IEnumerable<T> Paged(Expression<Func<T, bool>> predicate, Expression<Func<T, object>> sortBy,int pageSize, int pageIndex = 1);/// <summary>/// /// </summary>/// <param name="predicate"></param>/// <param name="sortBy"></param>/// <param name="pageSize"></param>/// <param name="pageIndex"></param>/// <param name="cancellationToken"></param>/// <returns></returns>Task<List<T>> PagedAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, object>> sortBy,int pageSize, int pageIndex = 1,
CancellationToken cancellationToken = new CancellationToken());#endregion} public interface IRepository<T> : IRepository<T, string>where T : IEntity<string>{
}
登录后复制
![](http://file2.kaopuke.com:8081/files_image/2022102011/bbaf8509b9f2780de22b59138a4a869c-6.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/bbaf8509b9f2780de22b59138a4a869c-7.gif)
public class MongoRepository<T> : IRepository<T> where T : IEntity<string>{#region Constructorprotected MongoRepository(IMongoCollection<T> collection)
{
DbSet = collection;
DbContext = collection.Database;
}#endregionpublic IEnumerator<T> GetEnumerator()
{return DbSet.AsQueryable().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{return GetEnumerator();
}#region 字段public Type ElementType => DbSet.AsQueryable().ElementType;public Expression Expression => DbSet.AsQueryable().Expression;public IQueryProvider Provider => DbSet.AsQueryable().Provider;public IMongoCollection<T> DbSet { get; }public IMongoDatabase DbContext { get; }#endregion#region Findpublic T GetById(string id)
{return Get(a => a.Id.Equals(id)).FirstOrDefault();
}public IEnumerable<T> Get(Expression<Func<T, bool>> predicate)
{return DbSet.FindSync(predicate).Current;
}public async Task<IEnumerable<T>> GetAsync(Expression<Func<T, bool>> predicate,
CancellationToken cancellationToken = new CancellationToken())
{var task = await DbSet.FindAsync(predicate, null, cancellationToken);return task.Current;
}#endregion#region Insertpublic T Insert(T entity)
{
DbSet.InsertOne(entity);return entity;
}public Task InsertAsync(T entity, CancellationToken cancellationToken = new CancellationToken())
{return DbSet.InsertOneAsync(entity, null, cancellationToken);
}public void Insert(IEnumerable<T> entities)
{
DbSet.InsertMany(entities);
}public Task InsertAsync(IEnumerable<T> entities, CancellationToken cancellationToken = new CancellationToken())
{return DbSet.InsertManyAsync(entities, null, cancellationToken);
}#endregion#region Updatepublic UpdateResult Update(T entity)
{var doc = entity.ToBsonDocument();return DbSet.UpdateOne(Builders<T>.Filter.Eq(e => e.Id, entity.Id),new BsonDocumentUpdateDefinition<T>(doc));
}public Task<UpdateResult> UpdateAsync(T entity, CancellationToken cancellationToken = new CancellationToken())
{var doc = entity.ToBsonDocument();return DbSet.UpdateOneAsync(Builders<T>.Filter.Eq(e => e.Id, entity.Id),new BsonDocumentUpdateDefinition<T>(doc), cancellationToken: cancellationToken);
}#endregion#region Deletepublic T Delete(string id)
{return DbSet.FindOneAndDelete(a => a.Id.Equals(id));
}public Task<T> DeleteAsync(string id, CancellationToken cancellationToken = new CancellationToken())
{return DbSet.FindOneAndDeleteAsync(a => a.Id.Equals(id), null, cancellationToken);
}public Task<DeleteResult> DeleteAsync(Expression<Func<T, bool>> predicate,
CancellationToken cancellationToken = new CancellationToken())
{return DbSet.DeleteManyAsync(predicate, cancellationToken);
}public DeleteResult Delete(Expression<Func<T, bool>> predicate)
{return DbSet.DeleteMany(predicate);
}#endregion#region Otherpublic long Count(Expression<Func<T, bool>> predicate)
{return DbSet.Count(predicate);
}public Task<long> CountAsync(Expression<Func<T, bool>> predicate,
CancellationToken cancellationToken = new CancellationToken())
{return DbSet.CountAsync(predicate, null, cancellationToken);
}public bool Exists(Expression<Func<T, bool>> predicate)
{return Get(predicate).Any();
}#endregion#region Pagepublic IEnumerable<T> Paged(Expression<Func<T, bool>> predicate, Expression<Func<T, object>> sortBy,int pageSize, int pageIndex = 1)
{var sort = Builders<T>.Sort.Descending(sortBy);return DbSet.Find(predicate).Sort(sort).Skip(pageSize * pageIndex - 1).Limit(pageSize).ToList();
}public Task<List<T>> PagedAsync(Expression<Func<T, bool>> predicate, Expression<Func<T, object>> sortBy,int pageSize, int pageIndex = 1,
CancellationToken cancellationToken = new CancellationToken())
{return Task.Run(() =>{var sort = Builders<T>.Sort.Descending(sortBy);return DbSet.Find(predicate).Sort(sort).Skip(pageSize * pageIndex - 1).Limit(pageSize).ToList();
}, cancellationToken);
}#endregion#region Helper/// <summary>/// 获取类型的所有属性信息/// </summary>/// <typeparam name="T"></typeparam>/// <typeparam name="TProperty"></typeparam>/// <param name="select"></param>/// <returns></returns>private PropertyInfo[] GetPropertyInfos<TProperty>(Expression<Func<T, TProperty>> select)
{var body = select.Body;switch (body.NodeType)
{case ExpressionType.Parameter:var parameterExpression = body as ParameterExpression;if (parameterExpression != null) return parameterExpression.Type.GetProperties();break;case ExpressionType.New:var newExpression = body as NewExpression;if (newExpression != null)return newExpression.Members.Select(m => m as PropertyInfo).ToArray();break;
}return null;
}#endregion}
登录后复制
使用如下:
![](http://file2.kaopuke.com:8081/files_image/2022102011/bbaf8509b9f2780de22b59138a4a869c-8.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/bbaf8509b9f2780de22b59138a4a869c-9.gif)
public class MongoDBSetting
{public string DataBase { get; set; }public string UserName { get; set; }public string Password { get; set; }public List<MongoServers> Services { get; set; }
}public class MongoServers
{public string Host { get; set; }public int Port { get; set; } = 27017;
}
登录后复制
![](http://file2.kaopuke.com:8081/files_image/2022102011/80317bbe6ccd8b774371660cff3c80a0-10.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/80317bbe6ccd8b774371660cff3c80a0-11.gif)
public class LogsContext
{private readonly IMongoDatabase _db;public LogsContext(IOptions<MongoDBSetting> options)
{var permissionSystem =MongoCredential.CreateCredential(options.Value.DataBase, options.Value.UserName,
options.Value.Password);var services = new List<MongoServerAddress>();foreach (var item in options.Value.Services)
{
services.Add(new MongoServerAddress(item.Host, item.Port));
}var settings = new MongoClientSettings
{
Credentials = new[] {permissionSystem},
Servers = services
};var _mongoClient = new MongoClient(settings);
_db = _mongoClient.GetDatabase(options.Value.DataBase);
}public IMongoCollection<ErrorLogs> ErrorLog => _db.GetCollection<ErrorLogs>("Error");public IMongoCollection<ErrorLogs> WarningLog => _db.GetCollection<ErrorLogs>("Warning");
}
登录后复制
![](http://file2.kaopuke.com:8081/files_image/2022102011/80317bbe6ccd8b774371660cff3c80a0-12.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/80317bbe6ccd8b774371660cff3c80a0-13.gif)
public static IServiceCollection UserMongoLog(this IServiceCollection services,
IConfigurationSection configurationSection)
{
services.Configure<MongoDBSetting>(configurationSection);
services.AddSingleton<LogsContext>();return services;
}
登录后复制
![](http://file2.kaopuke.com:8081/files_image/2022102011/80317bbe6ccd8b774371660cff3c80a0-14.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/80317bbe6ccd8b774371660cff3c80a0-15.gif)
public interface IErrorLogService : IRepository<ErrorLog>{
}public class ErrorLogService : MongoRepository<ErrorLog>, IErrorLogService
{public ErrorLogService(LogsContext dbContext) : base(dbContext.ErrorLog)
{
}
}
登录后复制
最后:
![](http://file2.kaopuke.com:8081/files_image/2022102011/80317bbe6ccd8b774371660cff3c80a0-16.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/80317bbe6ccd8b774371660cff3c80a0-17.gif)
services.UserMongoLog(Configuration.GetSection("Mongo.Log"));
登录后复制
![](http://file2.kaopuke.com:8081/files_image/2022102011/663f623dd08d5b06ae5b839278374ca3-18.gif)
![](http://file2.kaopuke.com:8081/files_image/2022102011/663f623dd08d5b06ae5b839278374ca3-19.gif)
"Mongo.Log": {"DataBase": "PermissionSystem","UserName": "sa","Password": "shtx@123","Services": [
{"Host": "192.168.1.6","Port": "27017" }
]
}
登录后复制
刚学洗使用MongoDB,才疏学浅,请大神多多指教
以上就是关于Asp.Net Core MongoDB的实例代码的详细内容,更多请关注靠谱客其它相关文章!
最后
以上就是温婉黄蜂为你收集整理的关于Asp.Net Core MongoDB的实例代码的全部内容,希望文章能够帮你解决关于Asp.Net Core MongoDB的实例代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复