From 9b394ced24ee3886ae674b53e7b7b8fdf986b851 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Fri, 2 May 2025 16:55:48 +0800 Subject: [PATCH] Update mongodb --- .../Common/MongoDbMethodUtils.cs | 23 +++++++++++++++++++ .../DbDataReaderFactory.cs | 21 ++++++++--------- .../DbDataReaderFactory.cs | 23 ++++++++----------- .../ExecuteNonQueryItems/DeleteHandler.cs | 1 + .../ExecuteNonQueryItems/DeleteManyHandler.cs | 1 + .../ExecuteHandlerFactory.cs | 2 +- .../IMongoOperationHandler.cs | 1 + .../ExecuteNonQueryItems/InsertHandler.cs | 1 + .../ExecuteNonQueryItems/InsertManyHandler.cs | 1 + .../ExecuteNonQueryItems/NonFindHandler.cs | 10 ++++++-- .../ExecuteNonQueryItems/UpdateHandler.cs | 1 + .../ExecuteNonQueryItems/UpdateManyHandler.cs | 1 + .../DeleteHandlerAsync.cs | 1 + .../DeleteManyHandlerAsync.cs | 1 + .../ExecuteHandlerFactory.cs | 2 +- .../IMongoOperationHandler.cs | 3 ++- .../InsertHandlerAsync.cs | 1 + .../InsertManyHandlerAsync.cs | 1 + .../NonFindHandlerAsync.cs | 4 +++- .../UpdateHandler.cs | 1 + .../UpdateManyHandler.cs | 1 + 21 files changed, 70 insertions(+), 31 deletions(-) create mode 100644 Src/Asp.NetCore2/MongoDb.Ado.data/Common/MongoDbMethodUtils.cs diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/Common/MongoDbMethodUtils.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/Common/MongoDbMethodUtils.cs new file mode 100644 index 000000000..54d1ad8e9 --- /dev/null +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/Common/MongoDbMethodUtils.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace MongoDb.Ado.data +{ + public class MongoDbMethodUtils + { + public void ValidateOperation(string operation) + { + if (ExecuteHandlerFactory.Items.TryGetValue(operation, out var handler)) + { + return ; + } + if (DbDataReaderFactory.Items.TryGetValue(operation, out var handlerQuery)) + { + return; + } + throw new InvalidOperationException($"Operation '{operation}' is not supported."); + } + } +} diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteDbDataReaderItems/DbDataReaderFactory.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteDbDataReaderItems/DbDataReaderFactory.cs index 319f47f94..36eb97b34 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteDbDataReaderItems/DbDataReaderFactory.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteDbDataReaderItems/DbDataReaderFactory.cs @@ -12,24 +12,21 @@ namespace MongoDb.Ado.data { public class DbDataReaderFactory { + public readonly static Dictionary Items = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "find", new QueryFindHandler() }, + { "aggregate", new QueryFindHandler() }, + }; public DbDataReader Handle(string operation, IMongoCollection collection, string json) { var doc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize(json); - IQueryHandler queryHandler = null; - if (operation == "find") + DbDataReaderFactory.Items.TryGetValue(operation, out var handler); + if (handler==null) { - queryHandler = new QueryFindHandler(); - } - else if (operation == "aggregate") - { - queryHandler = new QueryAggregateHandler(); - } - else - { - ExecuteHandlerFactory.Handler(operation,json, collection); + ExecuteHandlerFactory.Handler(operation, json, collection); return new DataTable().CreateDataReader(); } - return queryHandler.Handler(collection, doc); + return handler.Handler(collection, doc); } } diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteDbDataReaderItemsAsync/DbDataReaderFactory.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteDbDataReaderItemsAsync/DbDataReaderFactory.cs index da870db8e..50b7a79de 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteDbDataReaderItemsAsync/DbDataReaderFactory.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteDbDataReaderItemsAsync/DbDataReaderFactory.cs @@ -13,24 +13,21 @@ namespace MongoDb.Ado.data { public class DbDataReaderFactoryAsync { - public async Task HandleAsync(string operation, IMongoCollection collection, string json) + public readonly static Dictionary Items = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "find", new QueryFindHandlerAsync() }, + { "aggregate", new QueryFindHandlerAsync() }, + }; + public async Task Handle(string operation, IMongoCollection collection, string json) { var doc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize(json); - IQueryHandlerAsync queryHandler = null; - if (operation == "find") + DbDataReaderFactoryAsync.Items.TryGetValue(operation, out var handler); + if (handler == null) { - queryHandler = new QueryFindHandlerAsync(); - } - else if (operation == "aggregate") - { - queryHandler = new QueryAggregateHandlerAsync(); - } - else - { - await ExecuteHandlerFactoryAsync.HandlerAsync(operation,json, collection); + await ExecuteHandlerFactoryAsync.HandlerAsync(operation, json, collection); return new DataTable().CreateDataReader(); } - return await queryHandler.HandlerAsync(collection, doc); + return await handler.HandlerAsync(collection, doc); } } diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/DeleteHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/DeleteHandler.cs index 25bc2c1cd..328745f62 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/DeleteHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/DeleteHandler.cs @@ -8,6 +8,7 @@ namespace MongoDb.Ado.data { public class DeleteHandler : IMongoOperationHandler { + public string operation { get; set; } public int Handle(IMongoCollection collection, string json) { var doc = BsonDocument.Parse(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/DeleteManyHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/DeleteManyHandler.cs index 1e5c1a88b..eedcbe47f 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/DeleteManyHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/DeleteManyHandler.cs @@ -9,6 +9,7 @@ namespace MongoDb.Ado.data { public class DeleteManyHandler : IMongoOperationHandler { + public string operation { get; set; } public int Handle(IMongoCollection collection, string json) { var documents = ParseJsonArray(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/ExecuteHandlerFactory.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/ExecuteHandlerFactory.cs index d9ad9685c..9ca650903 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/ExecuteHandlerFactory.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/ExecuteHandlerFactory.cs @@ -27,7 +27,7 @@ namespace MongoDb.Ado.data if (!handlers.TryGetValue(operation, out var handler)) throw new NotSupportedException($"不支持的操作类型: {operation}"); - + handler.operation = operation; return handler.Handle(collection, json); } diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/IMongoOperationHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/IMongoOperationHandler.cs index b56aadb63..3114189be 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/IMongoOperationHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/IMongoOperationHandler.cs @@ -8,6 +8,7 @@ namespace MongoDb.Ado.data { public interface IMongoOperationHandler { + string operation { get; set; } int Handle(IMongoCollection collection, string json); } } diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/InsertHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/InsertHandler.cs index c2695313d..dc471dacb 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/InsertHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/InsertHandler.cs @@ -8,6 +8,7 @@ namespace MongoDb.Ado.data { public class InsertHandler : IMongoOperationHandler { + public string operation { get; set; } public int Handle(IMongoCollection collection, string json) { var doc = BsonDocument.Parse(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/InsertManyHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/InsertManyHandler.cs index 60c974cfe..082583822 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/InsertManyHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/InsertManyHandler.cs @@ -9,6 +9,7 @@ namespace MongoDb.Ado.data { public class InsertManyHandler : IMongoOperationHandler { + public string operation { get; set; } public int Handle(IMongoCollection collection, string json) { var documents = ParseJsonArray(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/NonFindHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/NonFindHandler.cs index 3900126ab..4d191a86a 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/NonFindHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/NonFindHandler.cs @@ -8,10 +8,16 @@ namespace MongoDb.Ado.data { public class NonFindHandler : IMongoOperationHandler { + public string operation { get; set; } public int Handle(IMongoCollection collection, string json) { - var filter = string.IsNullOrWhiteSpace(json) ? FilterDefinition.Empty : BsonDocument.Parse(json); - var result = collection.Find(filter).FirstOrDefault(); + using (var dr = new DbDataReaderFactory().Handle(operation, collection, json)) + { + if (dr.Read()) + { + + } + } return 0; // 查询不改变数据库 } } diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/UpdateHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/UpdateHandler.cs index 2091fe01a..f99ef3c9b 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/UpdateHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/UpdateHandler.cs @@ -8,6 +8,7 @@ namespace MongoDb.Ado.data { public class UpdateHandler : IMongoOperationHandler { + public string operation { get; set; } public int Handle(IMongoCollection collection, string json) { var doc = BsonDocument.Parse(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/UpdateManyHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/UpdateManyHandler.cs index fe2a25277..bd6e84e64 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/UpdateManyHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItems/UpdateManyHandler.cs @@ -9,6 +9,7 @@ namespace MongoDb.Ado.data { public class UpdateManyHandler : IMongoOperationHandler { + public string operation { get; set; } public int Handle(IMongoCollection collection, string json) { var documents = ParseJsonArray(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/DeleteHandlerAsync.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/DeleteHandlerAsync.cs index 95ab0f798..acff45561 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/DeleteHandlerAsync.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/DeleteHandlerAsync.cs @@ -9,6 +9,7 @@ namespace MongoDb.Ado.data { public class DeleteHandlerAsync : IMongoOperationHandlerAsync { + public string operation { get; set; } public async Task HandleAsync(IMongoCollection collection, string json) { var doc = BsonDocument.Parse(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/DeleteManyHandlerAsync.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/DeleteManyHandlerAsync.cs index bde6d0398..c023960b9 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/DeleteManyHandlerAsync.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/DeleteManyHandlerAsync.cs @@ -10,6 +10,7 @@ namespace MongoDb.Ado.data { public class DeleteManyHandlerAsync : IMongoOperationHandlerAsync { + public string operation { get; set; } public async Task HandleAsync(IMongoCollection collection, string json) { var documents = ParseJsonArray(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/ExecuteHandlerFactory.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/ExecuteHandlerFactory.cs index a9d250198..bf260aa33 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/ExecuteHandlerFactory.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/ExecuteHandlerFactory.cs @@ -28,7 +28,7 @@ namespace MongoDb.Ado.data if (!handlers.TryGetValue(operation, out var handler)) throw new NotSupportedException($"不支持的操作类型: {operation}"); - + handler.operation = operation; return handler.HandleAsync(collection, json); } diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/IMongoOperationHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/IMongoOperationHandler.cs index 8575f9ce1..4255a11ab 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/IMongoOperationHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/IMongoOperationHandler.cs @@ -8,7 +8,8 @@ using System.Threading.Tasks; namespace MongoDb.Ado.data { public interface IMongoOperationHandlerAsync - { + { + string operation { get; set; } Task HandleAsync(IMongoCollection collection, string json); } } diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/InsertHandlerAsync.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/InsertHandlerAsync.cs index 6216e5adf..3b6b120bd 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/InsertHandlerAsync.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/InsertHandlerAsync.cs @@ -9,6 +9,7 @@ namespace MongoDb.Ado.data { public class InsertHandlerAsync : IMongoOperationHandlerAsync { + public string operation { get; set; } public async Task HandleAsync(IMongoCollection collection, string json) { var doc = BsonDocument.Parse(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/InsertManyHandlerAsync.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/InsertManyHandlerAsync.cs index 304e7f5a2..8508e7ac5 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/InsertManyHandlerAsync.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/InsertManyHandlerAsync.cs @@ -10,6 +10,7 @@ namespace MongoDb.Ado.data { public class InsertManyHandlerAsync : IMongoOperationHandlerAsync { + public string operation { get; set; } public async Task HandleAsync(IMongoCollection collection, string json) { var documents = ParseJsonArray(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/NonFindHandlerAsync.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/NonFindHandlerAsync.cs index c9e79e884..a0568ebff 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/NonFindHandlerAsync.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/NonFindHandlerAsync.cs @@ -9,9 +9,11 @@ namespace MongoDb.Ado.data { public class NonFindHandlerAsync : IMongoOperationHandlerAsync { + public string operation { get; set; } + public async Task HandleAsync(IMongoCollection collection, string json) { - using (var dr = await new DbDataReaderFactoryAsync().HandleAsync("", collection, json)) + using (var dr = await new DbDataReaderFactoryAsync().HandleAsync(operation, collection, json)) { if (dr.Read()) { diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/UpdateHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/UpdateHandler.cs index e5d19ea35..fe5bb4456 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/UpdateHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/UpdateHandler.cs @@ -9,6 +9,7 @@ namespace MongoDb.Ado.data { public class UpdateHandlerAsync : IMongoOperationHandlerAsync { + public string operation { get; set; } public async Task HandleAsync(IMongoCollection collection, string json) { var doc = BsonDocument.Parse(json); diff --git a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/UpdateManyHandler.cs b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/UpdateManyHandler.cs index f4dc8ed96..e97d731c1 100644 --- a/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/UpdateManyHandler.cs +++ b/Src/Asp.NetCore2/MongoDb.Ado.data/ExecuteNonQueryItemsAsync/UpdateManyHandler.cs @@ -10,6 +10,7 @@ namespace MongoDb.Ado.data { public class UpdateManyHandlerAsync : IMongoOperationHandlerAsync { + public string operation { get; set; } public async Task HandleAsync(IMongoCollection collection, string json) { var documents = ParseJsonArray(json);