Skip to content

Commit 4240f3c

Browse files
committed
[修复]1. 修复增加或更新函数不能正常运行的异常
1 parent c5c98b6 commit 4240f3c

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

GameFrameX.DataBase/Mongo/MongoDbService.Mix.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public sealed partial class MongoDbService
1717
/// <returns>返回增加或更新的条数</returns>
1818
public async Task<TState> AddOrUpdateAsync<TState>(TState state) where TState : BaseCacheState, new()
1919
{
20-
var resultState = await FindAsync<TState>(state.Id);
20+
var resultState = await InnerFindAsync<TState>(state.Id);
2121

2222
if (resultState == null)
2323
{

GameFrameX.DataBase/Mongo/MongoDbService.Query.cs

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ namespace GameFrameX.DataBase.Mongo;
1616
public sealed partial class MongoDbService
1717
{
1818
/// <summary>
19-
/// 加载指定ID的缓存状态。
19+
/// 异步加载指定ID的缓存状态。
20+
/// 此方法尝试从MongoDB中查找与给定ID匹配的缓存状态。
21+
/// 如果找到状态,则返回该状态;如果未找到,则创建一个新的状态实例。
2022
/// </summary>
21-
/// <typeparam name="TState">缓存状态的类型。</typeparam>
23+
/// <typeparam name="TState">缓存状态的类型,必须是BaseCacheState的子类,并具有无参数构造函数。</typeparam>
2224
/// <param name="id">要加载的缓存状态的ID。</param>
23-
/// <param name="filter">默认值获取器。</param>
24-
/// <returns>加载的缓存状态。</returns>
25+
/// <param name="filter">可选的过滤器,用于进一步限制查询结果的条件。</param>
26+
/// <returns>加载的缓存状态,如果未找到则返回新创建的状态。</returns>
2527
public async Task<TState> FindAsync<TState>(long id, Expression<Func<TState, bool>> filter = null) where TState : BaseCacheState, new()
2628
{
2729
var findExpression = GetDefaultFindExpression(filter);
@@ -30,20 +32,22 @@ public sealed partial class MongoDbService
3032

3133
if (state == null)
3234
{
35+
// 如果未找到状态,则创建一个新的状态实例,并设置其ID和创建时间
3336
state = new TState { Id = id, CreateTime = TimeHelper.TimeMilliseconds(), };
3437
}
3538

39+
// 调用后处理方法以加载状态的其他数据
3640
state.LoadFromDbPostHandler(isNew);
3741
return state;
3842
}
3943

4044
/// <summary>
4145
/// 异步查找满足指定条件的缓存状态。
42-
/// 当没有找到时,会创建一个
46+
/// 如果没有找到满足条件的状态,则会创建一个新的状态实例。
4347
/// </summary>
44-
/// <typeparam name="TState">缓存状态的类型。</typeparam>
45-
/// <param name="filter">查询条件。</param>
46-
/// <returns>满足条件的缓存状态。</returns>
48+
/// <typeparam name="TState">缓存状态的类型,必须是BaseCacheState的子类,并具有无参数构造函数。</typeparam>
49+
/// <param name="filter">查询条件,用于限制查找的结果。</param>
50+
/// <returns>满足条件的缓存状态,如果未找到则返回新创建的状态。</returns>
4751
public async Task<TState> FindAsync<TState>(Expression<Func<TState, bool>> filter) where TState : BaseCacheState, new()
4852
{
4953
var findExpression = GetDefaultFindExpression(filter);
@@ -52,13 +56,32 @@ public sealed partial class MongoDbService
5256

5357
if (state == null)
5458
{
59+
// 如果未找到状态,则创建一个新的状态实例,并设置其ID和创建时间
5560
state = new TState { Id = IdGenerator.GetNextUniqueId(), CreateTime = TimeHelper.TimeMilliseconds(), };
5661
}
5762

63+
// 调用后处理方法以加载状态的其他数据
5864
state.LoadFromDbPostHandler(isNew);
5965
return state;
6066
}
6167

68+
/// <summary>
69+
/// 异步加载指定ID的缓存状态。
70+
/// 此方法尝试从MongoDB中查找与给定ID匹配的缓存状态。
71+
/// 如果未找到状态,将返回null。
72+
/// </summary>
73+
/// <typeparam name="TState">缓存状态的类型,必须是BaseCacheState的子类,并具有无参数构造函数。</typeparam>
74+
/// <param name="id">要加载的缓存状态的唯一标识符。</param>
75+
/// <param name="filter">可选的过滤器,用于进一步限制查询结果的条件。</param>
76+
/// <returns>加载的缓存状态,如果未找到则返回null。</returns>
77+
private async Task<TState> InnerFindAsync<TState>(long id, Expression<Func<TState, bool>> filter = null) where TState : BaseCacheState, new()
78+
{
79+
var findExpression = GetDefaultFindExpression(filter);
80+
var state = await _mongoDbContext.Find<TState>().Match(findExpression).OneAsync(id);
81+
return state;
82+
}
83+
84+
6285
/// <summary>
6386
/// 异步查找满足指定条件的缓存状态列表。
6487
/// </summary>

0 commit comments

Comments
 (0)