/// <summary> /// 配置分片特性。 /// </summary> /// <param name="strategyType">给定的策略类型。</param> /// <param name="suffix">给定的后缀(支持的参数可参考指定的分片策略类型)。</param> /// <param name="configureAction">给定的分片命名特性配置动作(可选)。</param> /// <returns>返回 <see cref="AccessorDbContextOptionsBuilder"/>。</returns> public virtual AccessorDbContextOptionsBuilder WithSharding(Type strategyType, string suffix, Action <ShardedAttribute>?configureAction = null) { var attribute = new ShardedAttribute(suffix, strategyType); attribute.TryUpdateBaseNameFromConnectionString(_relationalOptionsExtension?.ConnectionString); configureAction?.Invoke(attribute); return(WithSharding(attribute)); }
/// <summary> /// 对实体映射的数据表分片。 /// </summary> /// <param name="manager">给定的 <see cref="IShardingManager"/>。</param> /// <param name="entityType">给定的实体类型。</param> /// <param name="entity">给定的实体对象。</param> /// <param name="tableName">给定的表名。</param> /// <returns>返回 <see cref="ShardedDescriptor"/>。</returns> public static ShardedDescriptor ShardEntity(this IShardingManager manager, Type entityType, object?entity, string?tableName) { var attribute = ShardedAttribute.ParseFromEntity(entityType, tableName); var descriptor = manager.CreateDescriptor(attribute); descriptor.ReferenceType = entityType; descriptor.ReferenceValue = entity; descriptor.ReferenceName = tableName; descriptor.DefaultStrategy?.FormatSuffix(descriptor); descriptor.Entity?.Properties.ForEach(p => p.Strategy.FormatSuffix(descriptor)); return(descriptor); }
private static ShardedDescriptor CreateDescriptor(this IShardingManager manager, ShardedAttribute attribute) { if (string.IsNullOrEmpty(attribute.BaseName)) { throw new ArgumentException($"The {nameof(attribute)}.{nameof(attribute.BaseName)} is null or empty."); } var descriptor = new ShardedDescriptor(attribute.BaseName, attribute.Suffix); if (attribute.DefaultStrategyType is not null) { descriptor.DefaultStrategy = manager.GetStrategy(attribute.DefaultStrategyType); } return(descriptor); }
/// <summary> /// 配置分片特性。 /// </summary> /// <param name="sharded">给定的 <see cref="ShardedAttribute"/>。</param> /// <returns>返回 <see cref="AccessorDbContextOptionsBuilder"/>。</returns> public virtual AccessorDbContextOptionsBuilder WithSharding(ShardedAttribute sharded) => WithOption(e => e.WithSharding(sharded));