sharding/samples/Sample.MySql/Shardings/DynamicTableRoute.cs

34 lines
1.0 KiB
C#

using Sample.MySql.Domain.Entities;
using ShardingCore.Core.EntityMetadatas;
using ShardingCore.Core.VirtualRoutes;
using ShardingCore.Core.VirtualRoutes.TableRoutes.Abstractions;
namespace Sample.MySql.Shardings;
public class DynamicTableRoute:AbstractShardingOperatorVirtualTableRoute<DynamicTable,string>
{
public override string ShardingKeyToTail(object shardingKey)
{
return $"{shardingKey}";
}
public override List<string> GetTails()
{
return new List<string>();
}
public override void Configure(EntityMetadataTableBuilder<DynamicTable> builder)
{
builder.ShardingProperty(o => o.Id);
}
public override Func<string, bool> GetRouteToFilter(string shardingKey, ShardingOperatorEnum shardingOperator)
{
var shardingKeyToTail = ShardingKeyToTail(shardingKey);
switch (shardingOperator)
{
case ShardingOperatorEnum.Equal: return t => t == shardingKeyToTail;
default: return t => true;
}
}
}