VOOZH about

URL: https://www.nuget.org/packages/Microsoft.Orleans.EventSourcing/

⇱ NuGet Gallery | Microsoft.Orleans.EventSourcing 10.2.0




👁 Image
Microsoft.Orleans.EventSourcing 10.2.0

Prefix Reserved
dotnet add package Microsoft.Orleans.EventSourcing --version 10.2.0
 
 
NuGet\Install-Package Microsoft.Orleans.EventSourcing -Version 10.2.0
 
 
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Microsoft.Orleans.EventSourcing" Version="10.2.0" />
 
 
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Microsoft.Orleans.EventSourcing" Version="10.2.0" />
 
Directory.Packages.props
<PackageReference Include="Microsoft.Orleans.EventSourcing" />
 
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Microsoft.Orleans.EventSourcing --version 10.2.0
 
 
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Microsoft.Orleans.EventSourcing, 10.2.0"
 
 
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Microsoft.Orleans.EventSourcing@10.2.0
 
 
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Microsoft.Orleans.EventSourcing&version=10.2.0
 
Install as a Cake Addin
#tool nuget:?package=Microsoft.Orleans.EventSourcing&version=10.2.0
 
Install as a Cake Tool
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Microsoft Orleans Event Sourcing

Introduction

Microsoft Orleans Event Sourcing provides support for implementing event-sourced grains. Event sourcing is a pattern where state changes are recorded as a sequence of events rather than just storing the current state. This provides a complete history of changes and allows for powerful capabilities like replaying events, temporal querying, and more robust auditing.

Getting Started

To use this package, install it via NuGet:

dotnet add package Microsoft.Orleans.EventSourcing

Example - Creating an Event-Sourced Grain

using Orleans;
using Orleans.EventSourcing;
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;

// Define grain state and events
namespace BankAccount;

public class BankAccountState
{
 public decimal Balance { get; set; }
 public string AccountHolder { get; set; }
 public int Version { get; set; }
}

public class DepositEvent
{
 public decimal Amount { get; set; }
}

public class WithdrawalEvent
{
 public decimal Amount { get; set; }
}

// Grain interface
public interface IBankAccountGrain : IGrainWithStringKey
{
 Task<decimal> GetBalance();
 Task Deposit(decimal amount);
 Task Withdraw(decimal amount);
 Task<IReadOnlyList<object>> GetHistory();
}

// Event-sourced grain implementation using JournaledGrain
public class BankAccountGrain : JournaledGrain<BankAccountState, object>, IBankAccountGrain
{
 public async Task<decimal> GetBalance()
 {
 // The state is automatically hydrated from the event log
 return State.Balance;
 }

 public async Task Deposit(decimal amount)
 {
 if (amount <= 0)
 throw new ArgumentException("Deposit amount must be positive");

 // Record the event - this will be persisted and applied to state
 RaiseEvent(new DepositEvent { Amount = amount });
 
 // Confirm the event is persisted
 await ConfirmEvents();
 }

 public async Task Withdraw(decimal amount)
 {
 if (amount <= 0)
 throw new ArgumentException("Withdrawal amount must be positive");
 
 if (State.Balance < amount)
 throw new InvalidOperationException("Insufficient funds");

 // Record the event
 RaiseEvent(new WithdrawalEvent { Amount = amount });
 
 // Confirm the event is persisted
 await ConfirmEvents();
 }

 public Task<IReadOnlyList<object>> GetHistory()
 {
 // Return the complete history of events
 return Task.FromResult<IReadOnlyList<object>>(RetrieveConfirmedEvents(0, Version).ToList());
 }

 // Event handlers to update the state based on events
 protected override void ApplyEvent(object @event)
 {
 switch (@event)
 {
 case DepositEvent deposit:
 State.Balance += deposit.Amount;
 break;
 
 case WithdrawalEvent withdrawal:
 State.Balance -= withdrawal.Amount;
 break;
 }
 }
}

Example - Configuring Event Sourcing with Storage

using Microsoft.Extensions.Hosting;
using Orleans.Configuration;
using Orleans.Hosting;
using Orleans.EventSourcing;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Threading.Tasks;

var builder = Host.CreateApplicationBuilder(args)
 .UseOrleans(siloBuilder =>
 {
 siloBuilder
 .UseLocalhostClustering()
 // Configure the log consistency provider for event sourcing
 .AddLogStorageBasedLogConsistencyProvider("LogStorage")
 // Configure a storage provider to store the events
 .AddMemoryGrainStorage("PubSubStore")
 .ConfigureServices(services =>
 {
 // Configure default log consistency provider
 services.Configure<JournaledGrainOptions>(options =>
 {
 options.DefaultLogConsistencyProvider = "LogStorage";
 });
 });
 });

var host = builder.Build();
await host.StartAsync();

// Get a reference to a grain and call it
var client = host.Services.GetRequiredService<IClusterClient>();
var bankAccount = client.GetGrain<IBankAccountGrain>("account-123");

// Call grain methods
await bankAccount.Deposit(100);
await bankAccount.Withdraw(25);
var balance = await bankAccount.GetBalance();

// Print the result
Console.WriteLine($"Account balance: ${balance}");

var history = await bankAccount.GetHistory();
Console.WriteLine($"Transaction history: {history.Count} events");

// Keep the host running until the application is shut down
await host.WaitForShutdownAsync();

Documentation

For more comprehensive documentation, please refer to:

Feedback & Contributing

Product Versions Compatible and additional computed target framework versions.
.NET net8.0 net8.0 is compatible.  net8.0-android net8.0-android was computed.  net8.0-browser net8.0-browser was computed.  net8.0-ios net8.0-ios was computed.  net8.0-maccatalyst net8.0-maccatalyst was computed.  net8.0-macos net8.0-macos was computed.  net8.0-tvos net8.0-tvos was computed.  net8.0-windows net8.0-windows was computed.  net9.0 net9.0 was computed.  net9.0-android net9.0-android was computed.  net9.0-browser net9.0-browser was computed.  net9.0-ios net9.0-ios was computed.  net9.0-maccatalyst net9.0-maccatalyst was computed.  net9.0-macos net9.0-macos was computed.  net9.0-tvos net9.0-tvos was computed.  net9.0-windows net9.0-windows was computed.  net10.0 net10.0 is compatible.  net10.0-android net10.0-android was computed.  net10.0-browser net10.0-browser was computed.  net10.0-ios net10.0-ios was computed.  net10.0-maccatalyst net10.0-maccatalyst was computed.  net10.0-macos net10.0-macos was computed.  net10.0-tvos net10.0-tvos was computed.  net10.0-windows net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (19)

Showing the top 5 NuGet packages that depend on Microsoft.Orleans.EventSourcing:

Package Downloads
Mtl.Autumn

利用Orleans简单封装的基于RabitMQ的CQRS框架(还未完善)

ZLSoft.QWPlatform.WebBasics

基础服务

iTool.ClusterComponent

为NetCore提供 In Process 可靠的/高速的 缓存、队列等常用分布式组件。 无第三方依赖的开发友好、运维友好型框架

Orleans.EventSourcing.Snapshot

Snapshot storage provider for orleans event sourcing

Fuxion.Orleans

Fuxion infrastructure for Orleans frameowrk

GitHub repositories (2)

Showing the top 2 popular GitHub repositories that depend on Microsoft.Orleans.EventSourcing:

Repository Stars
dotnet/samples
Sample code referenced by the .NET documentation
axzxs2001/Asp.NetCoreExperiment
原来所有项目都移动到**OleVersion**目录下进行保留。新的案例装以.net 5.0为主,一部分对以前案例进行升级,一部分将以前的工作经验总结出来,以供大家参考!
Version Downloads Last Updated
10.2.0 350 6/12/2026
10.1.1-preview.1 67 5/13/2026
10.1.0 9,088 4/14/2026
10.0.1 13,962 2/7/2026
10.0.0 4,029 1/20/2026
10.0.0-rc.2 278 12/31/2025
9.2.1 55,714 7/16/2025
9.2.0 10,104 7/14/2025
9.2.0-preview3 437 6/10/2025
9.2.0-preview2 273 6/4/2025
9.2.0-preview1 3,646 4/4/2025
9.1.2 98,082 2/13/2025
3.8.1 163 4/24/2026
3.8.0 2,310 5/6/2025
3.8.0-preview5 318 5/12/2025
3.8.0-preview3 250 4/8/2025
3.8.0-preview2 191 4/4/2025
3.8.0-preview1 324 3/31/2025
Loading failed