Skip to content

Commit 5999021

Browse files
authored
Merge pull request #7582 from Particular/sqltransport-sqlpersistence-v10
Update sqltransport-sqlpersistence sample to v10
2 parents dbcb5c3 + 1ed5d3c commit 5999021

24 files changed

+539
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.Threading.Tasks;
2+
using Microsoft.Extensions.Logging;
3+
using NServiceBus;
4+
namespace Dapper
5+
{
6+
public class OrderSubmittedHandler(ILogger<OrderSubmittedHandler> logger) :
7+
IHandleMessages<OrderSubmitted>
8+
{
9+
public Task Handle(OrderSubmitted message, IMessageHandlerContext context)
10+
{
11+
logger.LogInformation("Order {OrderId} worth {Value} persisted by Dapper", message.OrderId, message.Value);
12+
13+
#region StoreDataDapper
14+
15+
var session = context.SynchronizedStorageSession.SqlPersistenceSession();
16+
17+
var order = new SubmittedOrder
18+
{
19+
Id = $"Dapper-{message.OrderId}",
20+
Value = message.Value,
21+
};
22+
23+
var sql = @"insert into receiver.SubmittedOrder
24+
(Id, Value)
25+
values (@Id, @Value)";
26+
return session.Connection.ExecuteAsync(sql: sql,
27+
param: order,
28+
transaction: session.Transaction);
29+
30+
#endregion
31+
}
32+
}
33+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace Dapper
2+
{
3+
#region SubmittedOrderDapper
4+
5+
public class SubmittedOrder
6+
{
7+
public string Id { get; set; }
8+
public int Value { get; set; }
9+
}
10+
11+
#endregion
12+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System.Threading.Tasks;
2+
using Microsoft.EntityFrameworkCore;
3+
using Microsoft.Extensions.Logging;
4+
using NServiceBus;
5+
6+
namespace EntityFramework
7+
{
8+
public class OrderSubmittedHandler(ILogger<OrderSubmittedHandler> logger) :
9+
IHandleMessages<OrderSubmitted>
10+
{
11+
public async Task Handle(OrderSubmitted message, IMessageHandlerContext context)
12+
{
13+
logger.LogInformation("Order {OrderId} worth {Value} persisted by EF", message.OrderId, message.Value);
14+
15+
#region StoreDataEf
16+
17+
var session = context.SynchronizedStorageSession.SqlPersistenceSession();
18+
19+
var order = new SubmittedOrder
20+
{
21+
Id = $"EF-{message.OrderId}",
22+
Value = message.Value,
23+
};
24+
25+
using (var dbContext = new SubmittedOrderDbContext(session.Connection))
26+
{
27+
dbContext.Database.UseTransaction(session.Transaction);
28+
29+
await dbContext.SubmittedOrder.AddAsync(order, context.CancellationToken);
30+
31+
await dbContext.SaveChangesAsync(context.CancellationToken);
32+
}
33+
34+
#endregion
35+
}
36+
}
37+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.ComponentModel.DataAnnotations.Schema;
2+
3+
namespace EntityFramework
4+
{
5+
#region SubmittedOrderEF
6+
7+
[Table("SubmittedOrder", Schema = "receiver")]
8+
public class SubmittedOrder
9+
{
10+
public string Id { get; set; }
11+
public int Value { get; set; }
12+
}
13+
14+
#endregion
15+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System.Data.Common;
2+
using Microsoft.EntityFrameworkCore;
3+
4+
namespace EntityFramework
5+
{
6+
#region SubmittedOrderDbContext
7+
8+
public class SubmittedOrderDbContext : DbContext
9+
{
10+
DbConnection connection;
11+
12+
public DbSet<SubmittedOrder> SubmittedOrder { get; set; }
13+
14+
public SubmittedOrderDbContext(DbConnection connection)
15+
{
16+
this.connection = connection;
17+
}
18+
19+
protected override void OnConfiguring(DbContextOptionsBuilder options)
20+
{
21+
options.UseSqlServer(connection);
22+
}
23+
}
24+
25+
#endregion
26+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Microsoft.Extensions.Logging;
4+
using NServiceBus;
5+
6+
public class OrderLifecycleSaga(ILogger<OrderLifecycleSaga> logger) :
7+
Saga<OrderLifecycleSaga.SagaData>,
8+
IAmStartedByMessages<OrderSubmitted>,
9+
IHandleTimeouts<OrderTimeout>
10+
{
11+
protected override void ConfigureHowToFindSaga(SagaPropertyMapper<SagaData> mapper)
12+
{
13+
mapper.MapSaga(saga => saga.OrderId)
14+
.ToMessage<OrderSubmitted>(msg => msg.OrderId);
15+
}
16+
17+
public Task Handle(OrderSubmitted message, IMessageHandlerContext context)
18+
{
19+
Data.OrderId = message.OrderId;
20+
return RequestTimeout<OrderTimeout>(context, TimeSpan.FromSeconds(5));
21+
}
22+
23+
public Task Timeout(OrderTimeout state, IMessageHandlerContext context)
24+
{
25+
logger.LogInformation("Got timeout");
26+
return Task.CompletedTask;
27+
}
28+
29+
public class SagaData :
30+
ContainSagaData
31+
{
32+
public Guid OrderId { get; set; }
33+
}
34+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Threading.Tasks;
2+
using NServiceBus;
3+
4+
public class OrderSubmittedHandler :
5+
IHandleMessages<OrderSubmitted>
6+
{
7+
public Task Handle(OrderSubmitted message, IMessageHandlerContext context)
8+
{
9+
var orderAccepted = new OrderAccepted
10+
{
11+
OrderId = message.OrderId
12+
};
13+
return context.Reply(orderAccepted);
14+
}
15+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
public class OrderTimeout
2+
{
3+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System.Threading.Tasks;
2+
using Microsoft.Extensions.Logging;
3+
using NServiceBus;
4+
using ServiceStack.OrmLite;
5+
6+
namespace OrmLite
7+
{
8+
9+
public class OrderSubmittedHandler(ILogger<OrderSubmittedHandler> logger) :
10+
IHandleMessages<OrderSubmitted>
11+
{
12+
static OrderSubmittedHandler()
13+
{
14+
OrmLiteConfig.DialectProvider = SqlServer2016Dialect.Provider;
15+
}
16+
17+
public Task Handle(OrderSubmitted message, IMessageHandlerContext context)
18+
{
19+
logger.LogInformation("Order {OrderId} worth {Value} persisted by OrmLite", message.OrderId, message.Value);
20+
21+
#region StoreDataOrmLite
22+
23+
var session = context.SynchronizedStorageSession.SqlPersistenceSession();
24+
25+
var order = new SubmittedOrder
26+
{
27+
Id = $"OrmLite-{message.OrderId}",
28+
Value = message.Value,
29+
};
30+
31+
return session.Connection.UpdateAsync(
32+
obj: order,
33+
commandFilter: command => command.Transaction = session.Transaction,
34+
context.CancellationToken);
35+
36+
#endregion
37+
}
38+
}
39+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace OrmLite
2+
{
3+
using ServiceStack.DataAnnotations;
4+
5+
#region SubmittedOrderOrmLite
6+
7+
[Schema("receiver")]
8+
public class SubmittedOrder
9+
{
10+
public string Id { get; set; }
11+
public int Value { get; set; }
12+
}
13+
14+
#endregion
15+
}

0 commit comments

Comments
 (0)