diff --git a/src/ShardingCore/EFCores/EFCore7x/ShardingStateManager.cs b/src/ShardingCore/EFCores/EFCore7x/ShardingStateManager.cs new file mode 100644 index 00000000..f0d927d1 --- /dev/null +++ b/src/ShardingCore/EFCores/EFCore7x/ShardingStateManager.cs @@ -0,0 +1,35 @@ +using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Internal; +using Microsoft.EntityFrameworkCore.Metadata; +using ShardingCore.Sharding.Abstractions; + +namespace ShardingCore.EFCores +{ + public class ShardingStateManager:StateManager + { + private readonly IShardingDbContext _currentShardingDbContext; + + public ShardingStateManager(StateManagerDependencies dependencies) : base(dependencies) + { + + _currentShardingDbContext = (IShardingDbContext)dependencies.CurrentContext; + } + + public override InternalEntityEntry GetOrCreateEntry(object entity) + { + var genericDbContext = _currentShardingDbContext.CreateGenericDbContext(entity); + var dbContextDependencies = genericDbContext.GetService(); + var stateManager = dbContextDependencies.StateManager; + return stateManager.GetOrCreateEntry(entity); + } + + public override InternalEntityEntry GetOrCreateEntry(object entity, IEntityType entityType) + { + var genericDbContext = _currentShardingDbContext.CreateGenericDbContext(entity); + var dbContextDependencies = genericDbContext.GetService(); + var stateManager = dbContextDependencies.StateManager; + return stateManager.GetOrCreateEntry(entity,entityType); + } + } +} \ No newline at end of file