diff --git a/src/DocumentDbTests/Configuration/DocumentMappingTests.cs b/src/DocumentDbTests/Configuration/DocumentMappingTests.cs index e32dfeefe5..9325853821 100644 --- a/src/DocumentDbTests/Configuration/DocumentMappingTests.cs +++ b/src/DocumentDbTests/Configuration/DocumentMappingTests.cs @@ -3,7 +3,10 @@ using System.Reflection; using JasperFx.CodeGeneration; using JasperFx.Core.Reflection; +using JasperFx.Events; +using JasperFx.Events.Projections; using Marten; +using Marten.Events.Projections; using Marten.Exceptions; using Marten.Linq.Members; using Marten.Linq.Parsing; @@ -917,6 +920,20 @@ public static void ConfigureMarten(DocumentMapping #endregion + [Fact] + public void uses_ConfigureMarten_for_projection_view_type_registered_only_via_projection() + { + using var store = DocumentStore.For(opts => + { + opts.Connection(ConnectionSource.ConnectionString); + opts.Projections.Add(ProjectionLifecycle.Inline); + }); + + var mapping = store.Options.Storage.MappingFor(typeof(ProjectionConfiguredView)); + mapping.ShouldBeOfType>(); + mapping.Indexes.OfType().Any().ShouldBeTrue(); + } + #region sample_using_DatabaseSchemaName_attribute [DatabaseSchemaName("organization")] @@ -932,3 +949,30 @@ public class BadDoc { public string Name { get; set; } } + +public record SomeProjectionEvent(Guid Id, string ImportantField); + +public class ProjectionConfiguredView +{ + public string Id { get; set; } = ""; + public string ImportantField { get; set; } = ""; + + public static void ConfigureMarten(DocumentMapping mapping) + { + mapping.Index(x => x.ImportantField); + } +} + +public class ProjectionWithConfiguredView: MultiStreamProjection +{ + public ProjectionWithConfiguredView() + { + Identity>(e => e.Data.Id.ToString()); + } + + public ProjectionConfiguredView Apply(SomeProjectionEvent @event, ProjectionConfiguredView current) + { + current.ImportantField = @event.ImportantField; + return current; + } +} diff --git a/src/Marten/Storage/StorageFeatures.cs b/src/Marten/Storage/StorageFeatures.cs index af016c8064..a7abd52e19 100644 --- a/src/Marten/Storage/StorageFeatures.cs +++ b/src/Marten/Storage/StorageFeatures.cs @@ -107,7 +107,9 @@ internal DocumentMapping Build(Type type, StoreOptions options) } _buildingList.Value.Remove(type); - var m = new DocumentMapping(type, options); + var fallbackBuilder = typeof(DocumentMappingBuilder<>) + .CloseAndBuildAs(type); + var m = fallbackBuilder.Build(options); _options.applyPostPolicies(m); return m; }