Skip to content

Commit 78294ed

Browse files
committed
[修改]1. 修改将查询单个数据接口。查询不到的时候。会返回一个新的对象
1 parent a856ece commit 78294ed

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

GameFrameX.DataBase/GameDB.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public static Task<List<TState>> FindSortAscendingAsync<TState>(Expression<Func<
131131

132132
/// <summary>
133133
/// 根据ID加载指定的文档
134+
/// 当没有找到指定ID的文档时,会创建一个新的文档返回
134135
/// </summary>
135136
/// <typeparam name="TState">文档的类型,必须继承自BaseCacheState且有无参构造函数</typeparam>
136137
/// <param name="id">要查找的文档ID</param>
@@ -144,11 +145,12 @@ public static Task<List<TState>> FindSortAscendingAsync<TState>(Expression<Func<
144145

145146
/// <summary>
146147
/// 查找与指定过滤器匹配的单个文档
148+
/// 当没有找到指定ID的文档时,会创建一个新的文档返回
147149
/// </summary>
148150
/// <typeparam name="TState">文档的类型,必须继承自BaseCacheState</typeparam>
149151
/// <param name="filter">用于筛选文档的Lambda表达式</param>
150152
/// <returns>找到的第一个匹配文档,如果没有匹配项则返回null</returns>
151-
public static Task<TState> FindAsync<TState>(Expression<Func<TState, bool>> filter) where TState : BaseCacheState
153+
public static Task<TState> FindAsync<TState>(Expression<Func<TState, bool>> filter) where TState : BaseCacheState, new()
152154
{
153155
ArgumentNullException.ThrowIfNull(_dbServiceImplementation, nameof(_dbServiceImplementation));
154156
return _dbServiceImplementation.FindAsync(filter);

GameFrameX.DataBase/Mongo/MongoDbService.Query.cs

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,49 +25,55 @@ public sealed partial class MongoDbService
2525
{
2626
var findExpression = GetDefaultFindExpression(filter);
2727
var state = await _mongoDbContext.Find<TState>().Match(findExpression).OneAsync(id);
28-
state?.LoadFromDbPostHandler(false);
29-
3028
var isNew = state == null;
3129

3230
if (state == null)
3331
{
34-
state = new TState { Id = id, };
32+
state = new TState { Id = id, CreateTime = TimeHelper.TimeMilliseconds(), };
3533
}
3634

3735
state.LoadFromDbPostHandler(isNew);
3836
return state;
3937
}
4038

4139
/// <summary>
42-
/// 异步查找满足指定条件的缓存状态列表。
40+
/// 异步查找满足指定条件的缓存状态。
41+
/// 当没有找到时,会创建一个
4342
/// </summary>
4443
/// <typeparam name="TState">缓存状态的类型。</typeparam>
4544
/// <param name="filter">查询条件。</param>
46-
/// <returns>满足条件的缓存状态列表。</returns>
47-
public async Task<List<TState>> FindListAsync<TState>(Expression<Func<TState, bool>> filter) where TState : BaseCacheState
45+
/// <returns>满足条件的缓存状态。</returns>
46+
public async Task<TState> FindAsync<TState>(Expression<Func<TState, bool>> filter) where TState : BaseCacheState, new()
4847
{
4948
var findExpression = GetDefaultFindExpression(filter);
50-
var result = await _mongoDbContext.Queryable<TState>().Where(findExpression).ToListAsync();
51-
foreach (var state in result)
49+
var state = await _mongoDbContext.Queryable<TState>().Where(findExpression).SingleOrDefaultAsync();
50+
var isNew = state == null;
51+
52+
if (state == null)
5253
{
53-
state?.LoadFromDbPostHandler(false);
54+
state = new TState { Id = IdGenerator.GetNextUniqueId(), CreateTime = TimeHelper.TimeMilliseconds(), };
5455
}
5556

56-
return result;
57+
state.LoadFromDbPostHandler(isNew);
58+
return state;
5759
}
5860

5961
/// <summary>
60-
/// 异步查找满足指定条件的缓存状态
62+
/// 异步查找满足指定条件的缓存状态列表
6163
/// </summary>
6264
/// <typeparam name="TState">缓存状态的类型。</typeparam>
6365
/// <param name="filter">查询条件。</param>
64-
/// <returns>满足条件的缓存状态。</returns>
65-
public async Task<TState> FindAsync<TState>(Expression<Func<TState, bool>> filter) where TState : BaseCacheState
66+
/// <returns>满足条件的缓存状态列表。</returns>
67+
public async Task<List<TState>> FindListAsync<TState>(Expression<Func<TState, bool>> filter) where TState : BaseCacheState, new()
6668
{
6769
var findExpression = GetDefaultFindExpression(filter);
68-
var state = await _mongoDbContext.Queryable<TState>().Where(findExpression).SingleOrDefaultAsync();
69-
state?.LoadFromDbPostHandler(false);
70-
return state;
70+
var result = await _mongoDbContext.Queryable<TState>().Where(findExpression).ToListAsync();
71+
foreach (var state in result)
72+
{
73+
state?.LoadFromDbPostHandler(false);
74+
}
75+
76+
return result;
7177
}
7278

7379
/// <summary>

0 commit comments

Comments
 (0)