diff --git a/samples/multi-tenant/ravendb/Core_10/MultiTenant.sln b/samples/multi-tenant/ravendb/Raven_10/MultiTenant.sln
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/MultiTenant.sln
rename to samples/multi-tenant/ravendb/Raven_10/MultiTenant.sln
diff --git a/samples/multi-tenant/ravendb/Core_10/Receiver/Order.cs b/samples/multi-tenant/ravendb/Raven_10/Receiver/Order.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Receiver/Order.cs
rename to samples/multi-tenant/ravendb/Raven_10/Receiver/Order.cs
diff --git a/samples/multi-tenant/ravendb/Core_10/Receiver/OrderLifecycleSaga.cs b/samples/multi-tenant/ravendb/Raven_10/Receiver/OrderLifecycleSaga.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Receiver/OrderLifecycleSaga.cs
rename to samples/multi-tenant/ravendb/Raven_10/Receiver/OrderLifecycleSaga.cs
diff --git a/samples/multi-tenant/ravendb/Core_10/Receiver/OrderLifecycleSagaData.cs b/samples/multi-tenant/ravendb/Raven_10/Receiver/OrderLifecycleSagaData.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Receiver/OrderLifecycleSagaData.cs
rename to samples/multi-tenant/ravendb/Raven_10/Receiver/OrderLifecycleSagaData.cs
diff --git a/samples/multi-tenant/ravendb/Core_10/Receiver/OrderSubmittedHandler.cs b/samples/multi-tenant/ravendb/Raven_10/Receiver/OrderSubmittedHandler.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Receiver/OrderSubmittedHandler.cs
rename to samples/multi-tenant/ravendb/Raven_10/Receiver/OrderSubmittedHandler.cs
diff --git a/samples/multi-tenant/ravendb/Core_10/Receiver/OrderTimeout.cs b/samples/multi-tenant/ravendb/Raven_10/Receiver/OrderTimeout.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Receiver/OrderTimeout.cs
rename to samples/multi-tenant/ravendb/Raven_10/Receiver/OrderTimeout.cs
diff --git a/samples/multi-tenant/ravendb/Core_10/Receiver/Program.cs b/samples/multi-tenant/ravendb/Raven_10/Receiver/Program.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Receiver/Program.cs
rename to samples/multi-tenant/ravendb/Raven_10/Receiver/Program.cs
diff --git a/samples/multi-tenant/ravendb/Core_10/Receiver/PropagateTenantIdBehavior.cs b/samples/multi-tenant/ravendb/Raven_10/Receiver/PropagateTenantIdBehavior.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Receiver/PropagateTenantIdBehavior.cs
rename to samples/multi-tenant/ravendb/Raven_10/Receiver/PropagateTenantIdBehavior.cs
diff --git a/samples/multi-tenant/ravendb/Raven_10/Receiver/Receiver.csproj b/samples/multi-tenant/ravendb/Raven_10/Receiver/Receiver.csproj
new file mode 100644
index 00000000000..b4ee7c10ea3
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_10/Receiver/Receiver.csproj
@@ -0,0 +1,16 @@
+
+
+ net9.0;net8.0
+ Exe
+ 12.0
+ enable
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Core_10/Receiver/StoreTenantIdBehavior.cs b/samples/multi-tenant/ravendb/Raven_10/Receiver/StoreTenantIdBehavior.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Receiver/StoreTenantIdBehavior.cs
rename to samples/multi-tenant/ravendb/Raven_10/Receiver/StoreTenantIdBehavior.cs
diff --git a/samples/multi-tenant/ravendb/Core_10/Sender/OrderAcceptedHandler.cs b/samples/multi-tenant/ravendb/Raven_10/Sender/OrderAcceptedHandler.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Sender/OrderAcceptedHandler.cs
rename to samples/multi-tenant/ravendb/Raven_10/Sender/OrderAcceptedHandler.cs
diff --git a/samples/multi-tenant/ravendb/Core_10/Sender/Program.cs b/samples/multi-tenant/ravendb/Raven_10/Sender/Program.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Sender/Program.cs
rename to samples/multi-tenant/ravendb/Raven_10/Sender/Program.cs
diff --git a/samples/multi-tenant/ravendb/Core_9/Sender/Sender.csproj b/samples/multi-tenant/ravendb/Raven_10/Sender/Sender.csproj
similarity index 86%
rename from samples/multi-tenant/ravendb/Core_9/Sender/Sender.csproj
rename to samples/multi-tenant/ravendb/Raven_10/Sender/Sender.csproj
index ea20de6eca3..637b111be9a 100644
--- a/samples/multi-tenant/ravendb/Core_9/Sender/Sender.csproj
+++ b/samples/multi-tenant/ravendb/Raven_10/Sender/Sender.csproj
@@ -3,9 +3,10 @@
net9.0;net8.0
Exe
12.0
+ enable
-
+
diff --git a/samples/multi-tenant/ravendb/Core_10/Shared/OrderAccepted.cs b/samples/multi-tenant/ravendb/Raven_10/Shared/OrderAccepted.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Shared/OrderAccepted.cs
rename to samples/multi-tenant/ravendb/Raven_10/Shared/OrderAccepted.cs
diff --git a/samples/multi-tenant/ravendb/Core_10/Shared/OrderSubmitted.cs b/samples/multi-tenant/ravendb/Raven_10/Shared/OrderSubmitted.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/Shared/OrderSubmitted.cs
rename to samples/multi-tenant/ravendb/Raven_10/Shared/OrderSubmitted.cs
diff --git a/samples/multi-tenant/ravendb/Core_9/Shared/Shared.csproj b/samples/multi-tenant/ravendb/Raven_10/Shared/Shared.csproj
similarity index 85%
rename from samples/multi-tenant/ravendb/Core_9/Shared/Shared.csproj
rename to samples/multi-tenant/ravendb/Raven_10/Shared/Shared.csproj
index 72aec1f4abf..94bc7f5c40c 100644
--- a/samples/multi-tenant/ravendb/Core_9/Shared/Shared.csproj
+++ b/samples/multi-tenant/ravendb/Raven_10/Shared/Shared.csproj
@@ -2,6 +2,7 @@
net9.0;net8.0
12.0
+ enable
diff --git a/samples/multi-tenant/ravendb/Core_8/MultiTenant.sln b/samples/multi-tenant/ravendb/Raven_11/MultiTenant.sln
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/MultiTenant.sln
rename to samples/multi-tenant/ravendb/Raven_11/MultiTenant.sln
diff --git a/samples/multi-tenant/ravendb/Core_8/Receiver/Order.cs b/samples/multi-tenant/ravendb/Raven_11/Receiver/Order.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Receiver/Order.cs
rename to samples/multi-tenant/ravendb/Raven_11/Receiver/Order.cs
diff --git a/samples/multi-tenant/ravendb/Core_9/Receiver/OrderLifecycleSaga.cs b/samples/multi-tenant/ravendb/Raven_11/Receiver/OrderLifecycleSaga.cs
similarity index 88%
rename from samples/multi-tenant/ravendb/Core_9/Receiver/OrderLifecycleSaga.cs
rename to samples/multi-tenant/ravendb/Raven_11/Receiver/OrderLifecycleSaga.cs
index 5f99fccbea9..bd78f35edbb 100644
--- a/samples/multi-tenant/ravendb/Core_9/Receiver/OrderLifecycleSaga.cs
+++ b/samples/multi-tenant/ravendb/Raven_11/Receiver/OrderLifecycleSaga.cs
@@ -1,7 +1,4 @@
-using System;
-using System.Threading.Tasks;
-using Microsoft.Extensions.Logging;
-using NServiceBus;
+using Microsoft.Extensions.Logging;
public class OrderLifecycleSaga(ILogger logger) :
Saga,
diff --git a/samples/multi-tenant/ravendb/Core_9/Receiver/OrderLifecycleSagaData.cs b/samples/multi-tenant/ravendb/Raven_11/Receiver/OrderLifecycleSagaData.cs
similarity index 51%
rename from samples/multi-tenant/ravendb/Core_9/Receiver/OrderLifecycleSagaData.cs
rename to samples/multi-tenant/ravendb/Raven_11/Receiver/OrderLifecycleSagaData.cs
index 4dd8c335f05..1270ac73c4c 100644
--- a/samples/multi-tenant/ravendb/Core_9/Receiver/OrderLifecycleSagaData.cs
+++ b/samples/multi-tenant/ravendb/Raven_11/Receiver/OrderLifecycleSagaData.cs
@@ -1,6 +1,4 @@
-using NServiceBus;
-
-public class OrderLifecycleSagaData :
+public class OrderLifecycleSagaData :
ContainSagaData
{
public string OrderId { get; set; }
diff --git a/samples/multi-tenant/ravendb/Core_9/Receiver/OrderSubmittedHandler.cs b/samples/multi-tenant/ravendb/Raven_11/Receiver/OrderSubmittedHandler.cs
similarity index 94%
rename from samples/multi-tenant/ravendb/Core_9/Receiver/OrderSubmittedHandler.cs
rename to samples/multi-tenant/ravendb/Raven_11/Receiver/OrderSubmittedHandler.cs
index 6f32b4ea9ae..98b721188dd 100644
--- a/samples/multi-tenant/ravendb/Core_9/Receiver/OrderSubmittedHandler.cs
+++ b/samples/multi-tenant/ravendb/Raven_11/Receiver/OrderSubmittedHandler.cs
@@ -1,6 +1,4 @@
-using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
-using NServiceBus;
public class OrderSubmittedHandler(ILogger logger) :
IHandleMessages
diff --git a/samples/multi-tenant/ravendb/Core_8/Receiver/OrderTimeout.cs b/samples/multi-tenant/ravendb/Raven_11/Receiver/OrderTimeout.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Receiver/OrderTimeout.cs
rename to samples/multi-tenant/ravendb/Raven_11/Receiver/OrderTimeout.cs
diff --git a/samples/multi-tenant/ravendb/Raven_11/Receiver/Program.cs b/samples/multi-tenant/ravendb/Raven_11/Receiver/Program.cs
new file mode 100644
index 00000000000..c7cfcb16b7e
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_11/Receiver/Program.cs
@@ -0,0 +1,99 @@
+using Microsoft.Extensions.Hosting;
+using Raven.Client.Documents;
+using Raven.Client.Documents.Operations;
+using Raven.Client.Exceptions;
+using Raven.Client.Exceptions.Database;
+using Raven.Client.ServerWide;
+using Raven.Client.ServerWide.Operations;
+
+Console.Title = "Receiver";
+var builder = Host.CreateApplicationBuilder(args);
+
+var endpointConfiguration = new EndpointConfiguration("Samples.MultiTenant.Receiver");
+
+using var documentStore = new DocumentStore
+{
+ Urls = new[] { "http://localhost:8080" },
+ Database = "MultiTenantSamples",
+};
+
+documentStore.Initialize();
+await CreateDatabase(documentStore);
+await CreateTenantDatabase(documentStore, "A");
+await CreateTenantDatabase(documentStore, "B");
+
+var persistence = endpointConfiguration.UsePersistence();
+persistence.SetDefaultDocumentStore(documentStore);
+
+var transport = new LearningTransport
+{
+ TransportTransactionMode = TransportTransactionMode.ReceiveOnly
+};
+endpointConfiguration.UseTransport(transport);
+endpointConfiguration.UseSerialization();
+
+var outbox = endpointConfiguration.EnableOutbox();
+
+#region DetermineDatabase
+
+persistence.SetMessageToDatabaseMappingConvention(headers =>
+{
+ return headers.TryGetValue("tenant_id", out var tenantId)
+ ? $"MultiTenantSamples-{tenantId}"
+ : "MultiTenantSamples";
+});
+
+#endregion
+
+var pipeline = endpointConfiguration.Pipeline;
+
+pipeline.Register(new StoreTenantIdBehavior(), "Stores tenant ID in the session");
+pipeline.Register(new PropagateTenantIdBehavior(), "Propagates tenant ID to outgoing messages");
+
+builder.UseNServiceBus(endpointConfiguration);
+await builder.Build().RunAsync();
+
+static async Task CreateDatabase(IDocumentStore documentStore)
+{
+ try
+ {
+ await documentStore.Maintenance.ForDatabase(documentStore.Database).SendAsync(new GetStatisticsOperation());
+ }
+ catch (DatabaseDoesNotExistException)
+ {
+ try
+ {
+ await documentStore.Maintenance.Server.SendAsync(new CreateDatabaseOperation(new DatabaseRecord(documentStore.Database)));
+ }
+ catch (ConcurrencyException)
+ {
+ // This exception is thrown if the database already exists.
+ // We can safely ignore it, as our goal is simply to ensure it exists.
+ }
+ }
+}
+
+static async Task CreateTenantDatabase(DocumentStore documentStore, string tenant)
+{
+ #region CreateDatabase
+
+ var id = $"MultiTenantSamples-{tenant}";
+ try
+ {
+ await documentStore.Maintenance.ForDatabase(id).SendAsync(new GetStatisticsOperation());
+ }
+ catch (DatabaseDoesNotExistException)
+ {
+ try
+ {
+ await documentStore.Maintenance.Server.SendAsync(new CreateDatabaseOperation(new DatabaseRecord(id)));
+ }
+ catch (ConcurrencyException)
+ {
+ // This exception is thrown if the database already exists.
+ // We can safely ignore it, as our goal is simply to ensure it exists.
+ }
+ }
+
+ #endregion
+}
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Core_9/Receiver/PropagateTenantIdBehavior.cs b/samples/multi-tenant/ravendb/Raven_11/Receiver/PropagateTenantIdBehavior.cs
similarity index 89%
rename from samples/multi-tenant/ravendb/Core_9/Receiver/PropagateTenantIdBehavior.cs
rename to samples/multi-tenant/ravendb/Raven_11/Receiver/PropagateTenantIdBehavior.cs
index a6b60e90903..4a45a36c6de 100644
--- a/samples/multi-tenant/ravendb/Core_9/Receiver/PropagateTenantIdBehavior.cs
+++ b/samples/multi-tenant/ravendb/Raven_11/Receiver/PropagateTenantIdBehavior.cs
@@ -1,5 +1,3 @@
-using System;
-using System.Threading.Tasks;
using NServiceBus.Pipeline;
public class PropagateTenantIdBehavior :
diff --git a/samples/multi-tenant/ravendb/Core_10/Receiver/Receiver.csproj b/samples/multi-tenant/ravendb/Raven_11/Receiver/Receiver.csproj
similarity index 74%
rename from samples/multi-tenant/ravendb/Core_10/Receiver/Receiver.csproj
rename to samples/multi-tenant/ravendb/Raven_11/Receiver/Receiver.csproj
index cc25cfe953a..f9aad89b44a 100644
--- a/samples/multi-tenant/ravendb/Core_10/Receiver/Receiver.csproj
+++ b/samples/multi-tenant/ravendb/Raven_11/Receiver/Receiver.csproj
@@ -6,9 +6,9 @@
enable
-
-
-
+
+
+
diff --git a/samples/multi-tenant/ravendb/Core_9/Receiver/StoreTenantIdBehavior.cs b/samples/multi-tenant/ravendb/Raven_11/Receiver/StoreTenantIdBehavior.cs
similarity index 91%
rename from samples/multi-tenant/ravendb/Core_9/Receiver/StoreTenantIdBehavior.cs
rename to samples/multi-tenant/ravendb/Raven_11/Receiver/StoreTenantIdBehavior.cs
index 812087502ab..7286124b72d 100644
--- a/samples/multi-tenant/ravendb/Core_9/Receiver/StoreTenantIdBehavior.cs
+++ b/samples/multi-tenant/ravendb/Raven_11/Receiver/StoreTenantIdBehavior.cs
@@ -1,5 +1,3 @@
-using System;
-using System.Threading.Tasks;
using NServiceBus.Pipeline;
public class StoreTenantIdBehavior :
diff --git a/samples/multi-tenant/ravendb/Core_9/Sender/OrderAcceptedHandler.cs b/samples/multi-tenant/ravendb/Raven_11/Sender/OrderAcceptedHandler.cs
similarity index 78%
rename from samples/multi-tenant/ravendb/Core_9/Sender/OrderAcceptedHandler.cs
rename to samples/multi-tenant/ravendb/Raven_11/Sender/OrderAcceptedHandler.cs
index 657a0f35b9a..8973ada9264 100644
--- a/samples/multi-tenant/ravendb/Core_9/Sender/OrderAcceptedHandler.cs
+++ b/samples/multi-tenant/ravendb/Raven_11/Sender/OrderAcceptedHandler.cs
@@ -1,6 +1,5 @@
-using System.Threading.Tasks;
-using Microsoft.Extensions.Logging;
-using NServiceBus;
+using Microsoft.Extensions.Logging;
+
public class OrderAcceptedHandler(ILogger logger) :
IHandleMessages
{
diff --git a/samples/multi-tenant/ravendb/Raven_11/Sender/Program.cs b/samples/multi-tenant/ravendb/Raven_11/Sender/Program.cs
new file mode 100644
index 00000000000..9c88e1084e7
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_11/Sender/Program.cs
@@ -0,0 +1,65 @@
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+Console.Title = "Sender";
+
+// Configure the NServiceBus endpoint
+var endpointConfiguration = new EndpointConfiguration("Samples.MultiTenant.Sender");
+endpointConfiguration.UseTransport(new LearningTransport());
+endpointConfiguration.UseSerialization();
+endpointConfiguration.EnableInstallers();
+
+var builder = Host.CreateApplicationBuilder(args);
+builder.UseNServiceBus(endpointConfiguration);
+
+var host = builder.Build();
+
+await host.StartAsync();
+
+// Get the required services
+var messageSession = host.Services.GetRequiredService();
+// Register a cancellation token to gracefully handle application shutdown
+var ct = host.Services.GetRequiredService().ApplicationStopping;
+
+Console.WriteLine("Press A or B to publish a message (A and B are tenant IDs). Press Ctrl+C to shut down.");
+
+// Wait for user input to publish messages
+while (!ct.IsCancellationRequested)
+{
+ if (!Console.KeyAvailable)
+ {
+ // If no key is pressed, wait for a short time before checking again
+ await Task.Delay(100, CancellationToken.None);
+ continue;
+ }
+
+ var input = Console.ReadKey();
+ Console.WriteLine();
+
+ var inputKey = char.ToUpperInvariant(input.KeyChar);
+ if (inputKey is 'A' or 'B')
+ {
+ // Send a message to the specified tenant
+ var message = new OrderSubmitted
+ {
+ OrderId = GenerateOrderId(),
+ Value = GenerateOrderValue()
+ };
+
+ var options = new PublishOptions();
+ options.SetHeader("tenant_id", inputKey.ToString());
+
+ await messageSession.Publish(message, options);
+ }
+ else
+ {
+ Console.WriteLine($"[{inputKey}] is not a valid tenant identifier.");
+ }
+}
+
+// Wait for the host to stop gracefully
+await host.StopAsync();
+
+static string GenerateOrderId() => Guid.NewGuid().ToString("N")[..6].ToUpperInvariant();
+
+static int GenerateOrderValue(int max = 100) => Random.Shared.Next(max);
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Core_10/Sender/Sender.csproj b/samples/multi-tenant/ravendb/Raven_11/Sender/Sender.csproj
similarity index 94%
rename from samples/multi-tenant/ravendb/Core_10/Sender/Sender.csproj
rename to samples/multi-tenant/ravendb/Raven_11/Sender/Sender.csproj
index ed89817f5b3..cddeed48115 100644
--- a/samples/multi-tenant/ravendb/Core_10/Sender/Sender.csproj
+++ b/samples/multi-tenant/ravendb/Raven_11/Sender/Sender.csproj
@@ -6,7 +6,7 @@
enable
-
+
diff --git a/samples/multi-tenant/ravendb/Core_9/Shared/OrderAccepted.cs b/samples/multi-tenant/ravendb/Raven_11/Shared/OrderAccepted.cs
similarity index 51%
rename from samples/multi-tenant/ravendb/Core_9/Shared/OrderAccepted.cs
rename to samples/multi-tenant/ravendb/Raven_11/Shared/OrderAccepted.cs
index dff2e21282d..829a19e430f 100644
--- a/samples/multi-tenant/ravendb/Core_9/Shared/OrderAccepted.cs
+++ b/samples/multi-tenant/ravendb/Raven_11/Shared/OrderAccepted.cs
@@ -1,6 +1,4 @@
-using NServiceBus;
-
-public class OrderAccepted :
+public class OrderAccepted :
IMessage
{
public string OrderId { get; set; }
diff --git a/samples/multi-tenant/ravendb/Core_9/Shared/OrderSubmitted.cs b/samples/multi-tenant/ravendb/Raven_11/Shared/OrderSubmitted.cs
similarity index 63%
rename from samples/multi-tenant/ravendb/Core_9/Shared/OrderSubmitted.cs
rename to samples/multi-tenant/ravendb/Raven_11/Shared/OrderSubmitted.cs
index ccf783adac6..d2ed02ba798 100644
--- a/samples/multi-tenant/ravendb/Core_9/Shared/OrderSubmitted.cs
+++ b/samples/multi-tenant/ravendb/Raven_11/Shared/OrderSubmitted.cs
@@ -1,6 +1,4 @@
-using NServiceBus;
-
-public class OrderSubmitted :
+public class OrderSubmitted :
IEvent
{
public string OrderId { get; set; }
diff --git a/samples/multi-tenant/ravendb/Core_10/Shared/Shared.csproj b/samples/multi-tenant/ravendb/Raven_11/Shared/Shared.csproj
similarity index 97%
rename from samples/multi-tenant/ravendb/Core_10/Shared/Shared.csproj
rename to samples/multi-tenant/ravendb/Raven_11/Shared/Shared.csproj
index 09002cbbf5a..04e7e339b20 100644
--- a/samples/multi-tenant/ravendb/Core_10/Shared/Shared.csproj
+++ b/samples/multi-tenant/ravendb/Raven_11/Shared/Shared.csproj
@@ -5,6 +5,6 @@
enable
-
+
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Core_10/prerelease.txt b/samples/multi-tenant/ravendb/Raven_11/prerelease.txt
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_10/prerelease.txt
rename to samples/multi-tenant/ravendb/Raven_11/prerelease.txt
diff --git a/samples/multi-tenant/ravendb/Core_9/MultiTenant.sln b/samples/multi-tenant/ravendb/Raven_8/MultiTenant.sln
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_9/MultiTenant.sln
rename to samples/multi-tenant/ravendb/Raven_8/MultiTenant.sln
diff --git a/samples/multi-tenant/ravendb/Core_9/Receiver/Order.cs b/samples/multi-tenant/ravendb/Raven_8/Receiver/Order.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_9/Receiver/Order.cs
rename to samples/multi-tenant/ravendb/Raven_8/Receiver/Order.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Receiver/OrderLifecycleSaga.cs b/samples/multi-tenant/ravendb/Raven_8/Receiver/OrderLifecycleSaga.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Receiver/OrderLifecycleSaga.cs
rename to samples/multi-tenant/ravendb/Raven_8/Receiver/OrderLifecycleSaga.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Receiver/OrderLifecycleSagaData.cs b/samples/multi-tenant/ravendb/Raven_8/Receiver/OrderLifecycleSagaData.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Receiver/OrderLifecycleSagaData.cs
rename to samples/multi-tenant/ravendb/Raven_8/Receiver/OrderLifecycleSagaData.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Receiver/OrderSubmittedHandler.cs b/samples/multi-tenant/ravendb/Raven_8/Receiver/OrderSubmittedHandler.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Receiver/OrderSubmittedHandler.cs
rename to samples/multi-tenant/ravendb/Raven_8/Receiver/OrderSubmittedHandler.cs
diff --git a/samples/multi-tenant/ravendb/Core_9/Receiver/OrderTimeout.cs b/samples/multi-tenant/ravendb/Raven_8/Receiver/OrderTimeout.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_9/Receiver/OrderTimeout.cs
rename to samples/multi-tenant/ravendb/Raven_8/Receiver/OrderTimeout.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Receiver/Program.cs b/samples/multi-tenant/ravendb/Raven_8/Receiver/Program.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Receiver/Program.cs
rename to samples/multi-tenant/ravendb/Raven_8/Receiver/Program.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Receiver/PropagateTenantIdBehavior.cs b/samples/multi-tenant/ravendb/Raven_8/Receiver/PropagateTenantIdBehavior.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Receiver/PropagateTenantIdBehavior.cs
rename to samples/multi-tenant/ravendb/Raven_8/Receiver/PropagateTenantIdBehavior.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Receiver/Receiver.csproj b/samples/multi-tenant/ravendb/Raven_8/Receiver/Receiver.csproj
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Receiver/Receiver.csproj
rename to samples/multi-tenant/ravendb/Raven_8/Receiver/Receiver.csproj
diff --git a/samples/multi-tenant/ravendb/Core_8/Receiver/StoreTenantIdBehavior.cs b/samples/multi-tenant/ravendb/Raven_8/Receiver/StoreTenantIdBehavior.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Receiver/StoreTenantIdBehavior.cs
rename to samples/multi-tenant/ravendb/Raven_8/Receiver/StoreTenantIdBehavior.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Sender/OrderAcceptedHandler.cs b/samples/multi-tenant/ravendb/Raven_8/Sender/OrderAcceptedHandler.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Sender/OrderAcceptedHandler.cs
rename to samples/multi-tenant/ravendb/Raven_8/Sender/OrderAcceptedHandler.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Sender/Program.cs b/samples/multi-tenant/ravendb/Raven_8/Sender/Program.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Sender/Program.cs
rename to samples/multi-tenant/ravendb/Raven_8/Sender/Program.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Sender/Sender.csproj b/samples/multi-tenant/ravendb/Raven_8/Sender/Sender.csproj
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Sender/Sender.csproj
rename to samples/multi-tenant/ravendb/Raven_8/Sender/Sender.csproj
diff --git a/samples/multi-tenant/ravendb/Core_8/Shared/OrderAccepted.cs b/samples/multi-tenant/ravendb/Raven_8/Shared/OrderAccepted.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Shared/OrderAccepted.cs
rename to samples/multi-tenant/ravendb/Raven_8/Shared/OrderAccepted.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Shared/OrderSubmitted.cs b/samples/multi-tenant/ravendb/Raven_8/Shared/OrderSubmitted.cs
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Shared/OrderSubmitted.cs
rename to samples/multi-tenant/ravendb/Raven_8/Shared/OrderSubmitted.cs
diff --git a/samples/multi-tenant/ravendb/Core_8/Shared/Shared.csproj b/samples/multi-tenant/ravendb/Raven_8/Shared/Shared.csproj
similarity index 100%
rename from samples/multi-tenant/ravendb/Core_8/Shared/Shared.csproj
rename to samples/multi-tenant/ravendb/Raven_8/Shared/Shared.csproj
diff --git a/samples/multi-tenant/ravendb/Raven_9/MultiTenant.sln b/samples/multi-tenant/ravendb/Raven_9/MultiTenant.sln
new file mode 100644
index 00000000000..c21ea5d3c6f
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/MultiTenant.sln
@@ -0,0 +1,27 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29728.190
+MinimumVisualStudioVersion = 15.0.26730.12
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sender", "Sender\Sender.csproj", "{B58159EB-9EFD-443F-A80E-8C90B0AF1907}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Receiver", "Receiver\Receiver.csproj", "{1EEC6A8C-DB3C-4F20-93CE-5004BF16AD7F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\Shared.csproj", "{BF92D39E-42F6-44E9-8F7F-819993235621}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B58159EB-9EFD-443F-A80E-8C90B0AF1907}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B58159EB-9EFD-443F-A80E-8C90B0AF1907}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1EEC6A8C-DB3C-4F20-93CE-5004BF16AD7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1EEC6A8C-DB3C-4F20-93CE-5004BF16AD7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BF92D39E-42F6-44E9-8F7F-819993235621}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BF92D39E-42F6-44E9-8F7F-819993235621}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/samples/multi-tenant/ravendb/Raven_9/Receiver/Order.cs b/samples/multi-tenant/ravendb/Raven_9/Receiver/Order.cs
new file mode 100644
index 00000000000..efad49178d8
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Receiver/Order.cs
@@ -0,0 +1,5 @@
+public class Order
+{
+ public string Id { get; set; }
+ public decimal Value { get; set; }
+}
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderLifecycleSaga.cs b/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderLifecycleSaga.cs
new file mode 100644
index 00000000000..bd78f35edbb
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderLifecycleSaga.cs
@@ -0,0 +1,27 @@
+using Microsoft.Extensions.Logging;
+
+public class OrderLifecycleSaga(ILogger logger) :
+ Saga,
+ IAmStartedByMessages,
+ IHandleTimeouts
+{
+
+ public async Task Handle(OrderSubmitted message, IMessageHandlerContext context)
+ {
+ Data.OrderId = message.OrderId;
+
+ await RequestTimeout(context, TimeSpan.FromSeconds(5));
+ }
+
+ public Task Timeout(OrderTimeout state, IMessageHandlerContext context)
+ {
+ logger.LogInformation("Order {OrderId} has timed out", Data.OrderId);
+ return Task.CompletedTask;
+ }
+
+ protected override void ConfigureHowToFindSaga(SagaPropertyMapper mapper)
+ {
+ mapper.MapSaga(saga => saga.OrderId)
+ .ToMessage(m => m.OrderId);
+ }
+}
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderLifecycleSagaData.cs b/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderLifecycleSagaData.cs
new file mode 100644
index 00000000000..1270ac73c4c
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderLifecycleSagaData.cs
@@ -0,0 +1,5 @@
+public class OrderLifecycleSagaData :
+ ContainSagaData
+{
+ public string OrderId { get; set; }
+}
diff --git a/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderSubmittedHandler.cs b/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderSubmittedHandler.cs
new file mode 100644
index 00000000000..98b721188dd
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderSubmittedHandler.cs
@@ -0,0 +1,25 @@
+using Microsoft.Extensions.Logging;
+
+public class OrderSubmittedHandler(ILogger logger) :
+ IHandleMessages
+{
+ public async Task Handle(OrderSubmitted message, IMessageHandlerContext context)
+ {
+ logger.LogInformation("Order {OrderId} worth {Value} submitted", message.OrderId, message.Value);
+
+ var order = new Order
+ {
+ Id = message.OrderId,
+ Value = message.Value
+ };
+ var session = context.SynchronizedStorageSession.RavenSession();
+
+ await session.StoreAsync(order, context.CancellationToken);
+
+ var orderAccepted = new OrderAccepted
+ {
+ OrderId = message.OrderId,
+ };
+ await context.Reply(orderAccepted);
+ }
+}
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderTimeout.cs b/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderTimeout.cs
new file mode 100644
index 00000000000..3fd2a7c9a01
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Receiver/OrderTimeout.cs
@@ -0,0 +1,3 @@
+public class OrderTimeout
+{
+}
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Core_9/Receiver/Program.cs b/samples/multi-tenant/ravendb/Raven_9/Receiver/Program.cs
similarity index 96%
rename from samples/multi-tenant/ravendb/Core_9/Receiver/Program.cs
rename to samples/multi-tenant/ravendb/Raven_9/Receiver/Program.cs
index 3f101875080..cea1f53f820 100644
--- a/samples/multi-tenant/ravendb/Core_9/Receiver/Program.cs
+++ b/samples/multi-tenant/ravendb/Raven_9/Receiver/Program.cs
@@ -1,7 +1,4 @@
-using System;
-using System.Threading.Tasks;
-using Microsoft.Extensions.Hosting;
-using NServiceBus;
+using Microsoft.Extensions.Hosting;
using Raven.Client.Documents;
using Raven.Client.Documents.Operations;
using Raven.Client.Exceptions;
diff --git a/samples/multi-tenant/ravendb/Raven_9/Receiver/PropagateTenantIdBehavior.cs b/samples/multi-tenant/ravendb/Raven_9/Receiver/PropagateTenantIdBehavior.cs
new file mode 100644
index 00000000000..4a45a36c6de
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Receiver/PropagateTenantIdBehavior.cs
@@ -0,0 +1,16 @@
+using NServiceBus.Pipeline;
+
+public class PropagateTenantIdBehavior :
+ Behavior
+{
+ public override Task Invoke(IOutgoingLogicalMessageContext context, Func next)
+ {
+ if (context.Extensions.TryGet("TenantId", out string tenant))
+ {
+ context.Headers["tenant_id"] = tenant;
+ }
+ return next();
+
+ }
+}
+
diff --git a/samples/multi-tenant/ravendb/Core_9/Receiver/Receiver.csproj b/samples/multi-tenant/ravendb/Raven_9/Receiver/Receiver.csproj
similarity index 89%
rename from samples/multi-tenant/ravendb/Core_9/Receiver/Receiver.csproj
rename to samples/multi-tenant/ravendb/Raven_9/Receiver/Receiver.csproj
index 6cf744af537..25a60393298 100644
--- a/samples/multi-tenant/ravendb/Core_9/Receiver/Receiver.csproj
+++ b/samples/multi-tenant/ravendb/Raven_9/Receiver/Receiver.csproj
@@ -3,10 +3,11 @@
net9.0;net8.0
Exe
12.0
+ enable
-
+
diff --git a/samples/multi-tenant/ravendb/Raven_9/Receiver/StoreTenantIdBehavior.cs b/samples/multi-tenant/ravendb/Raven_9/Receiver/StoreTenantIdBehavior.cs
new file mode 100644
index 00000000000..7286124b72d
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Receiver/StoreTenantIdBehavior.cs
@@ -0,0 +1,16 @@
+using NServiceBus.Pipeline;
+
+public class StoreTenantIdBehavior :
+ Behavior
+{
+ public override Task Invoke(IIncomingLogicalMessageContext context, Func next)
+ {
+ if (context.MessageHeaders.TryGetValue("tenant_id", out var tenant))
+ {
+ Console.WriteLine($"Setting tenent id to {tenant}");
+ context.Extensions.Set("TenantId", tenant);
+ }
+ return next();
+
+ }
+}
diff --git a/samples/multi-tenant/ravendb/Raven_9/Sender/OrderAcceptedHandler.cs b/samples/multi-tenant/ravendb/Raven_9/Sender/OrderAcceptedHandler.cs
new file mode 100644
index 00000000000..8973ada9264
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Sender/OrderAcceptedHandler.cs
@@ -0,0 +1,11 @@
+using Microsoft.Extensions.Logging;
+
+public class OrderAcceptedHandler(ILogger logger) :
+ IHandleMessages
+{
+ public Task Handle(OrderAccepted message, IMessageHandlerContext context)
+ {
+ logger.LogInformation("Order {OrderId} accepted.", message.OrderId);
+ return Task.CompletedTask;
+ }
+}
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Core_9/Sender/Program.cs b/samples/multi-tenant/ravendb/Raven_9/Sender/Program.cs
similarity index 91%
rename from samples/multi-tenant/ravendb/Core_9/Sender/Program.cs
rename to samples/multi-tenant/ravendb/Raven_9/Sender/Program.cs
index fd9d51177de..bd1c64594a4 100644
--- a/samples/multi-tenant/ravendb/Core_9/Sender/Program.cs
+++ b/samples/multi-tenant/ravendb/Raven_9/Sender/Program.cs
@@ -1,9 +1,5 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
-using NServiceBus;
Console.Title = "Sender";
diff --git a/samples/multi-tenant/ravendb/Raven_9/Sender/Sender.csproj b/samples/multi-tenant/ravendb/Raven_9/Sender/Sender.csproj
new file mode 100644
index 00000000000..637b111be9a
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Sender/Sender.csproj
@@ -0,0 +1,14 @@
+
+
+ net9.0;net8.0
+ Exe
+ 12.0
+ enable
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Raven_9/Shared/OrderAccepted.cs b/samples/multi-tenant/ravendb/Raven_9/Shared/OrderAccepted.cs
new file mode 100644
index 00000000000..829a19e430f
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Shared/OrderAccepted.cs
@@ -0,0 +1,5 @@
+public class OrderAccepted :
+ IMessage
+{
+ public string OrderId { get; set; }
+}
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Raven_9/Shared/OrderSubmitted.cs b/samples/multi-tenant/ravendb/Raven_9/Shared/OrderSubmitted.cs
new file mode 100644
index 00000000000..d2ed02ba798
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Shared/OrderSubmitted.cs
@@ -0,0 +1,6 @@
+public class OrderSubmitted :
+ IEvent
+{
+ public string OrderId { get; set; }
+ public decimal Value { get; set; }
+}
\ No newline at end of file
diff --git a/samples/multi-tenant/ravendb/Raven_9/Shared/Shared.csproj b/samples/multi-tenant/ravendb/Raven_9/Shared/Shared.csproj
new file mode 100644
index 00000000000..94bc7f5c40c
--- /dev/null
+++ b/samples/multi-tenant/ravendb/Raven_9/Shared/Shared.csproj
@@ -0,0 +1,10 @@
+
+
+ net9.0;net8.0
+ 12.0
+ enable
+
+
+
+
+
\ No newline at end of file