Skip to content

Commit 71cd085

Browse files
committed
优化实体管理逻辑,新增配置选项 IncludeSpecialTable
- 在 `EntityManager` 类中新增静态字段 `IncludeSpecialTable`,用于控制是否包含特殊表,默认值为 `true`。 - 修改 `Initialize` 方法,过滤嵌套私有类型 (`IsNestedPrivate`),确保实体注册类型的准确性。 - 使用 `TryGetValue` 替代 `ContainsKey`,提升代码可读性和性能。 - 添加默认实体映射信息时,增加对 `IncludeSpecialTable` 的判断逻辑。 - 修复 `EntityTypeConfigurationBase` 类的代码格式问题,移除多余的 `}+}`。
1 parent 8c4efc2 commit 71cd085

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

src/OSharp.EntityFrameworkCore/EntityManager.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ namespace OSharp.Entity;
1414
/// </summary>
1515
public class EntityManager : IEntityManager
1616
{
17-
private readonly ConcurrentDictionary<Type, IEntityRegister[]> _entityRegistersDict
18-
= new ConcurrentDictionary<Type, IEntityRegister[]>();
17+
private readonly ConcurrentDictionary<Type, IEntityRegister[]> _entityRegistersDict = new();
1918
private readonly ILogger _logger;
2019
private bool _initialized;
2120

21+
public static bool IncludeSpecialTable = true;
22+
2223
/// <summary>
2324
/// 初始化一个<see cref="EntityManager"/>类型的新实例
2425
/// </summary>
@@ -33,7 +34,7 @@ public EntityManager(IServiceProvider provider)
3334
public virtual void Initialize()
3435
{
3536
var dict = _entityRegistersDict;
36-
Type[] types = AssemblyManager.FindTypesByBase<IEntityRegister>();
37+
Type[] types = AssemblyManager.FindTypesByBase<IEntityRegister>().Where(m => !m.IsNestedPrivate).ToArray();
3738
if (types.Length == 0 || _initialized)
3839
{
3940
_logger.LogDebug("数据库上下文实体已初始化,跳过");
@@ -48,14 +49,14 @@ public virtual void Initialize()
4849
foreach (IGrouping<Type, IEntityRegister> group in groups)
4950
{
5051
key = group.Key ?? typeof(DefaultDbContext);
51-
List<IEntityRegister> list = dict.ContainsKey(key) ? dict[key].ToList() : new List<IEntityRegister>();
52+
List<IEntityRegister> list = dict.TryGetValue(key, out var value) ? value.ToList() : new List<IEntityRegister>();
5253
list.AddRange(group);
5354
dict[key] = list.ToArray();
5455
}
5556

5657
//添加框架的一些默认实体的实体映射信息(如果不存在)
5758
key = typeof(DefaultDbContext);
58-
if (dict.ContainsKey(key))
59+
if (dict.ContainsKey(key) && IncludeSpecialTable)
5960
{
6061
List<IEntityRegister> list = dict[key].ToList();
6162
list.AddIfNotExist(new EntityInfoConfiguration(), m => m.EntityType.IsBaseOn<IEntityInfo>());
@@ -87,7 +88,7 @@ public virtual IEntityRegister[] GetEntityRegisters(Type dbContextType)
8788
{
8889
throw new OsharpException("数据访问模块未初始化,请确认数据上下文配置节点 OSharp:DbContexts 与要使用的数据库类型是否匹配");
8990
}
90-
return _entityRegistersDict.ContainsKey(dbContextType) ? _entityRegistersDict[dbContextType] : Array.Empty<IEntityRegister>();
91+
return _entityRegistersDict.TryGetValue(dbContextType, out var value) ? value : Array.Empty<IEntityRegister>();
9192
}
9293

9394
/// <summary>

src/OSharp.EntityFrameworkCore/EntityTypeConfigurationBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,4 @@ public void RegisterTo(ModelBuilder modelBuilder)
4848
/// </summary>
4949
/// <param name="builder">实体类型创建器</param>
5050
public abstract void Configure(EntityTypeBuilder<TEntity> builder);
51-
}
51+
}

0 commit comments

Comments
 (0)