关于Asp.Net Core MongoDB的实例代码
导读:收集整理的这篇文章主要介绍了关于Asp.Net Core MongoDB的实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。废话不说直接上代码;using MongoDB.Bson.Serialization.Attributes;...
收集整理的这篇文章主要介绍了关于Asp.Net Core MongoDB的实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。废话不说直接上代码;using MongoDB.Bson.Serialization.Attributes;
namespace XL.Core.MongoDB{
public interface IEntITyTKey>
{
/// summary>
/// 主键/// /summary>
[BsonId] TKey Id {
get;
set;
}
}
}
View Code [BsonIgnoreExtraElements(Inherited = true)]public abstract class Entity : IEntitystring>
{
/// summary>
/// 主键/// /summary>
[BsonRePResentation(BsonTyPE.ObjectId)]public virtual string Id {
get;
set;
}
}
View Code public interface IRepositoryT, in TKey>
: IQueryableT>
where T : IEntityTKey>
{
#region Fileds/// summary>
/// MongoDB表/// /summary>
IMongoCollectionT>
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>
IEnumerableT>
Get(ExPressionFuncT, bool>
>
predicate);
/// summary>
/// 获取对象/// /summary>
/// param name="predicate">
/param>
/// param name="cancellationToken">
/param>
/// returns>
/returns>
TaskIEnumerableT>
>
GetAsync(ExpressionFuncT, 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(IEnumerableT>
entities);
/// summary>
/// 插入文档/// /summary>
/// param name="entities">
/param>
/// param name="cancellationToken">
/param>
/// returns>
/returns>
Task InsertAsync(IEnumerableT>
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>
TaskUpdateResult>
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>
TaskT>
DeleteAsync(TKey id, CancellationToken cancellationToken = default(CancellationToken));
/// summary>
/// 异步删除/// /summary>
/// param name="predicate">
/param>
/// param name="cancellationToken">
/param>
/// returns>
/returns>
TaskDeleteResult>
DeleteAsync(ExpressionFuncT, bool>
>
predicate, CancellationToken cancellationToken = default(CancellationToken));
/// summary>
/// 删除/// /summary>
/// param name="predicate">
/param>
/// returns>
/returns>
DeleteResult Delete(ExpressionFuncT, bool>
>
predicate);
#endregion#region Other/// summary>
/// 计数/// /summary>
/// param name="predicate">
/param>
/// returns>
/returns>
long Count(ExpressionFuncT, bool>
>
predicate);
/// summary>
/// 计数/// /summary>
/// param name="predicate">
/param>
/// param name="cancellationToken">
/param>
/// returns>
/returns>
Tasklong>
CountAsync(ExpressionFuncT, bool>
>
predicate, CancellationToken cancellationToken = new CancellationToken());
/// summary>
/// 是否存在/// /summary>
/// param name="predicate">
/param>
/// returns>
/returns>
bool Exists(ExpressionFuncT, 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>
IEnumerableT>
Paged(ExpressionFuncT, bool>
>
predicate, ExpressionFuncT, 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>
TaskListT>
>
PagedAsync(ExpressionFuncT, bool>
>
predicate, ExpressionFuncT, object>
>
sortBy,int pageSize, int pageIndex = 1, CancellationToken cancellationToken = new CancellationToken());
#endregion}
public interface IRepositoryT>
: IRepositoryT, string>
where T : IEntitystring>
{
}
View Code public class MongoRepositoryT>
: IRepositoryT>
where T : IEntitystring>
{
#region Constructorprotected MongoRepository(IMongoCollectionT>
collection) {
DbSet = collection;
DbContext = collection.Database;
}
#endregionpublic IEnumeratorT>
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 IMongoCollectionT>
DbSet {
get;
}
public IMongoDatabase DbContext {
get;
}
#endregion#region Findpublic T GetById(string id) {
return Get(a =>
a.Id.Equals(id)).FirstOrDefault();
}
public IEnumerableT>
Get(ExpressionFuncT, bool>
>
predicate) {
return DbSet.FindSync(predicate).current;
}
public async TaskIEnumerableT>
>
GetAsync(ExpressionFuncT, 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(IEnumerableT>
entities) {
DbSet.InsertMany(entities);
}
public Task InsertAsync(IEnumerableT>
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(BuildersT>
.Filter.Eq(e =>
e.Id, entity.Id),new BsonDocumentUpdateDefinitionT>
(doc));
}
public TaskUpdateResult>
UpdateAsync(T entity, CancellationToken cancellationToken = new CancellationToken()) {
var doc = entity.ToBsonDocument();
return DbSet.UpdateOneAsync(BuildersT>
.Filter.Eq(e =>
e.Id, entity.Id),new BsonDocumentUpdateDefinitionT>
(doc), cancellationToken: cancellationToken);
}
#endregion#region Deletepublic T Delete(string id) {
return DbSet.FindOneAndDelete(a =>
a.Id.Equals(id));
}
public TaskT>
DeleteAsync(string id, CancellationToken cancellationToken = new CancellationToken()) {
return DbSet.FindOneAndDeleteAsync(a =>
a.Id.Equals(id), null, cancellationToken);
}
public TaskDeleteResult>
DeleteAsync(ExpressionFuncT, bool>
>
predicate, CancellationToken cancellationToken = new CancellationToken()) {
return DbSet.DeleteManyAsync(predicate, cancellationToken);
}
public DeleteResult Delete(ExpressionFuncT, bool>
>
predicate) {
return DbSet.DeleteMany(predicate);
}
#endregion#region Otherpublic long Count(ExpressionFuncT, bool>
>
predicate) {
return DbSet.Count(predicate);
}
public Tasklong>
CountAsync(ExpressionFuncT, bool>
>
predicate, CancellationToken cancellationToken = new CancellationToken()) {
return DbSet.CountAsync(predicate, null, cancellationToken);
}
public bool Exists(ExpressionFuncT, bool>
>
predicate) {
return Get(predicate).Any();
}
#endregion#region Pagepublic IEnumerableT>
Paged(ExpressionFuncT, bool>
>
predicate, ExpressionFuncT, object>
>
sortBy,int pageSize, int pageIndex = 1) {
var sort = BuildersT>
.Sort.Descending(sortBy);
return DbSet.Find(predicate).Sort(sort).Skip(pageSize * pageIndex - 1).Limit(pageSize).ToList();
}
public TaskListT>
>
PagedAsync(ExpressionFuncT, bool>
>
predicate, ExpressionFuncT, object>
>
sortBy,int pageSize, int pageIndex = 1, CancellationToken cancellationToken = new CancellationToken()) {
return Task.Run(() =>
{
var sort = BuildersT>
.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[] GetPropertyInfosTProperty>
(ExpressionFuncT, 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}
View Code使用如下:
public class MongoDBSetting {
public string DataBase {
get;
set;
}
public string UserName {
get;
set;
}
public string Password {
get;
set;
}
public ListmongoServers>
Services {
get;
set;
}
}
public class MongoServers {
public string Host {
get;
set;
}
public int Port {
get;
set;
}
= 27017;
}
View Code
public class LOGsContext {
private readonly IMongoDatabase _db;
public LogsContext(IOptionsMongoDBSetting>
options) {
var permissionSystem =MongoCredential.CreateCredential(options.Value.DataBase, options.Value.UserName, options.Value.Password);
var services = new ListMongoServerAddress>
();
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 IMongoCollectionErrorLogs>
ErrorLog =>
_db.GetCollectionErrorLogs>
("Error");
public IMongoCollectionErrorLogs>
WarningLog =>
_db.GetCollectionErrorLogs>
("Warning");
}
View Code public static IServiceCollection UserMongoLog(this IServiceCollection services, IconfigurationSection configurationSection) {
services.ConfigureMongoDBSetting>
(configurationSection);
services.AddSingletonLogsContext>
();
return services;
}
View Codepublic interface IErrorLogService : IRepositoryErrorLog>
{
}
public class ErrorLogService : MongoRepositoryErrorLog>
, IErrorLogService {
public ErrorLogService(LogsContext dbContext) : base(dbContext.ErrorLog) {
}
}
View Code最后:
services.UserMongoLog(Configuration.GetSection("Mongo.Log"));
View Code"Mongo.Log": {
"DataBase": "PermissionSystem","UserName": "sa","Password": "shtx@123","Services": [ {
"Host": "192.168.1.6","Port": "27017" }
] }
View Code刚学洗使用MongoDB,才疏学浅,请大神多多指教
以上就是关于Asp.Net Core MongoDB的实例代码的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 关于Asp.Net Core MongoDB的实例代码
本文地址: https://pptw.com/jishu/592309.html
