V7.0.0 -- Lucky Number 7!
Highlights
- Much improved LINQ provider support, including far more performant querying through child collections
- More efficient command execution pipeline in the Marten internals
- Effectively uses Polly for transient error resiliency
- Substantial improvements for asynchronous projections
- Dynamic tenant databases
- Some support for zero downtime projection rebuilds and versioned projections
- Project Aspire integration
FetchForWriting()
improvements
Issues Resolved
https://github.com/JasperFx/marten/milestone/96?closed=1
What's Changed
- Initial .NET 8 upgrade by @oskardudycz in #2789
- The giant Linq overhaul of 2023 by @jeremydmiller in #2793
- Disabling ordering when using count() operator in Linq statement generation by @jeremydmiller in #2811
- Test verifying an old Linq bug with flitering string arrays by @jeremydmiller in #2812
- querying child collections impacts each other by @T0shik in #2674
- Add failing test for #2433 by @luboshl in #2448
- Linq Fixes for SelectMany() by @jeremydmiller in #2814
- Test to verify that Include() plus ToPagedList() works after the LINQ overhaul by @jeremydmiller in #2816
- test from Hawxy on compiled queries by @jeremydmiller in #2817
- Improved Document Deletions by @jeremydmiller in #2818
- Fix for event Linq querying if you happen to have an Event.Id member by @jeremydmiller in #2819
- Little improvement to change tracking of dirty session because someone wanted that. by @jeremydmiller in #2820
- Modified ConsoleLogger to output array parameter values by @slovely in #2821
- Added support for IsNullOrEmpty and IsNullOrWhiteSpace string operators in Linq queries by @oskardudycz in #2823
- Fixed tenant id usage within compiled queries. Closes GH-2595 by @jeremydmiller in #2826
- Test cases verifying member comparisons in Linq. by @jeremydmiller in #2827
- Fixed EventProjection to respect global ordering by @oskardudycz in #2824
- Child collection linq improvements by @jeremydmiller in #2828
- Feeling good about duplicated value array fields. Closes GH-2768 by @jeremydmiller in #2831
- Making the CreatedAt expression use DateTimeOffset. Might not even ma… by @jeremydmiller in #2832
- using snake case instead of kebab casing for derived column names w/ … by @jeremydmiller in #2833
- using Activator.CreateInstance() to build aggregates w/ no public cto… by @jeremydmiller in #2834
- Fix GH-2835 by @mysticmind in #2836
- Add functionality to support custom sql query using
with select
format by @mysticmind in #2837 - Fix NGram index on nested property throwing an exception by @mysticmind in #2839
- Improved LINQ support for Dictionaries. Closes GH-2651 by @jeremydmiller in #2840
- Ability to define multi-column indexes with anonymous object ala EF C… by @jeremydmiller in #2841
- Better exception for unusable LINQ combination. Closes GH-2649 by @jeremydmiller in #2842
- Making the aggregate projections smarter in the face of mixed Create() & Apply() methods for the same event by @jeremydmiller in #2844
- Allowing users to add LINQ order by operators with literal SQL. Close… by @jeremydmiller in #2845
- Removed FullTextIndex from Marten and used FullTextIndexDefinition instead by @oskardudycz in #2847
- Use built-in snake-casing implementation in .NET 8 by @Hawxy in #2851
- #2762 Include documentation on DevOps including database migrations by @erdtsieck in #2853
- Assorted Linq fixes by @jeremydmiller in #2857
- #2849 ApplyEventException can leak event data to logs by @erdtsieck in #2854
- Propagating tenant override filters to Include() queries. Closes GH-2618 by @jeremydmiller in #2858
- Can order by a combination of string name for the property and string… by @jeremydmiller in #2859
- #2762 menu item to documentation on DevOps by @erdtsieck in #2860
- Add support for NpgsqlDataSource by @oskardudycz in #2855
- LINQ improvements for string.ToLower()/ToUpper() and querying by arra… by @jeremydmiller in #2861
- Using the cast on descending order by. Closes GH-2862 by @jeremydmiller in #2863
- Update storage.md to remove
mt_append_event
by @gfoidl in #2868 - Added Helpdesk sample from EventSourcing.NET repo by @oskardudycz in #2870
- Making the event stream version check work for Append to empty stream… by @jeremydmiller in #2872
- Forcing function names created for flat table projections to be all l… by @jeremydmiller in #2873
- Ability to filter Include() documents. Closes GH-2444 by @jeremydmiller in #2874
- Fix docs: links and minor typos by @schnerring in #2869
- test helper for async projections. Closes GH-2624 by @jeremydmiller in #2875
- Improved LINQ Select() transformations. Closes GH-1926. Closes GH-1026 by @jeremydmiller in #2877
- Add warning about schema changes by @ParadiseFallen in #2880
- (Mostly) using NpgsqlBatch and positional parameters behind the scenes by @jeremydmiller in #2894
- Ensuring that we don't try to check the ImplementationInstance prop f… by @jeremydmiller in #2905
- Couple LINQ fixes by @jeremydmiller in #2906
- Minor feature improvements to coordinators by @Hawxy in #2897
- feat: Allow Identity to use IEvent by @Blackclaws in #2884
- Overhaul of the execution pipeline by @jeremydmiller in #2918
- "Sticky" connection mode, doc updates, 7.0 migration guide by @jeremydmiller in #2929
- Index creation bug fixes. Closes GH-2893. Closes GH-2916. Closes GH-2914 by @jeremydmiller in #2930
- fix: Use count(*) instead of count(1) for performance reasons by @Blackclaws in #2925
- Clarify what happens with the batch file by @lamelyan in #2913
- Documentation on understanding event sourcing by @erdtsieck in #2920
- Patch implementation using pure PL/pgSQL by @mysticmind in #2923
- Add functionality to chain patch operations on multiple fields by @mysticmind in #2931
- #2943 Do not fail aggregate code generation on parallel execution by @erdtsieck in #2944
- Linq fixes for Hawxy (and V7) by @jeremydmiller in #2958
- LINQ bug fixes for a couple items around dictionaries and enum usage.… by @jeremydmiller in #2959
- Using the document Id itself for including a related document. Closes… by @jeremydmiller in #2960
- Alternative numeric revision strategy for optimistic concurrency by @jeremydmiller in #2963
- Update Vitepress by @Hawxy in #2899
- Updating to JasperFx.CodeGeneration. Closes GH-2932 by @jeremydmiller in #2969
- Got a BeforeCommitAsync() as part of async listeners. Closes GH-2962 by @jeremydmiller in #2970
- Async Daemon Overhaul for V7 -- and also a new Dynamic Tenant Database recipe by @jeremydmiller in #2954
- Blue green async projection deployments! And zero downtime too. Closes GH-1720 by @jeremydmiller in #2973
- Removed [Obsolete] and upgraded to Weasel 7.0.0. Closes GH-2806 by @jeremydmiller in #2974
- Dynamic spin of async daemons for dynamic tenant databases by @jeremydmiller in #2977
- feat(#2945): AsyncDaemonHealthCheck - add
maxSameLagTime
option by @MateuszNaKodach in #2950 - Linq fixes for Where(x => false) by @jeremydmiller in #2981
- Fixes and improvements for Critter Stack Pro rollout by @jeremydmiller in #2987
- relaxed duplicate alias check to consider schema names. Closes GH-2955 by @jeremydmiller in #2990
- Adding logging from ILogger to the NpgsqlDataSource when building via… by @jeremydmiller in #2991
- Broke out separate testing project for database multi-tenancy by @jeremydmiller in #2992
- Upgrading to Weasel 7.1. Closes GH-2983. Closes GH-2914 by @jeremydmiller in #2993
- Fix issue 2996: Sort by Type.FullName, not just Type.Name by @zachsaw-lmg in #2997
- Ability for the async daemon to skip unknown event types to enable bl… by @jeremydmiller in #2998
- Better way of adding logging to internal NpgsqlDataSource. Closes GH-… by @jeremydmiller in #2999
- Fixes for 7.0 by @jeremydmiller in #3006
New Contributors
- @ParadiseFallen made their first contribution in #2880
- @Blackclaws made their first contribution in #2884
- @lamelyan made their first contribution in #2913
- @MateuszNaKodach made their first contribution in #2950
- @zachsaw-lmg made their first contribution in #2997
Full Changelog: 6.4.1...v7.0.0