diff --git a/src/CoreTests/Partitioning/partitioning_by_hash_on_id.cs b/src/CoreTests/Partitioning/partitioning_by_hash_on_id.cs new file mode 100644 index 0000000000..ece9c518d2 --- /dev/null +++ b/src/CoreTests/Partitioning/partitioning_by_hash_on_id.cs @@ -0,0 +1,22 @@ +using System.Threading.Tasks; +using Marten.Testing.Documents; +using Marten.Testing.Harness; +using Xunit; + +namespace CoreTests.Partitioning; + +// Spawned by https://github.com/JasperFx/marten/issues/4025 +public class partitioning_by_hash_on_id : OneOffConfigurationsContext +{ + [Fact] + public async Task try_it_out() + { + StoreOptions(opts => + { + opts.Schema.For() + .PartitionOn(x => x.Id, x => x.ByHash("one", "two", "three")); + }); + + await theStore.Storage.ApplyAllConfiguredChangesToDatabaseAsync(); + } +} diff --git a/src/Marten/MartenRegistry.cs b/src/Marten/MartenRegistry.cs index 0af078de58..1f3d015e51 100644 --- a/src/Marten/MartenRegistry.cs +++ b/src/Marten/MartenRegistry.cs @@ -126,8 +126,16 @@ public DocumentMappingExpression PartitionOn(Expression> memb _builder.Alter = m => { var members = FindMembers.Determine(memberExpression); - var field = m.DuplicateField(members); - var columnName = field.ColumnName; + + var identity = m.IdMember; + + var columnName = "id"; + + if (!members.Contains(identity)) + { + var field = m.DuplicateField(members); + columnName = field.ColumnName; + } var expression = new PartitioningExpression(m, [columnName]); partitioning(expression);