Skip to content

Commit dec5114

Browse files
authored
Add NSB10 version for Entity Framework Core sample (#7565)
* Remove background service * Copy to new version * Updates for new version * Wrong spot * Fine all preview * Restore fake password
1 parent 594cecf commit dec5114

20 files changed

+420
-56
lines changed

samples/entity-framework-core/SqlPersistence_8/Endpoint.SqlPersistence/Program.cs

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
using NServiceBus;
44
using NServiceBus.Persistence.Sql;
55
using System;
6+
using System.Linq;
67
using Microsoft.Data.SqlClient;
78
using System.Threading.Tasks;
89
using Microsoft.Extensions.Hosting;
910

1011
var builder = Host.CreateApplicationBuilder(args);
11-
builder.Services.AddHostedService<Sender>();
1212

1313
//for local instance or SqlExpress
1414
//var connectionString = @"Data Source=(localdb)\mssqllocaldb;Database=NsbSamplesEfCoreUowSql;Trusted_Connection=True;MultipleActiveResultSets=true";
@@ -63,10 +63,35 @@
6363

6464
#endregion
6565

66-
Console.WriteLine("Press any key, the application is starting");
67-
Console.ReadKey();
68-
Console.WriteLine("Starting...");
69-
7066
builder.UseNServiceBus(endpointConfiguration);
7167

72-
await builder.Build().RunAsync();
68+
var host = builder.Build();
69+
await host.StartAsync();
70+
var messageSession = host.Services.GetRequiredService<IMessageSession>();
71+
72+
var random = new Random();
73+
const string letters = "ABCDEFGHIJKLMNOPQRSTUVXYZ";
74+
var locations = new[] { "London", "Paris", "Oslo", "Madrid" };
75+
76+
while (true)
77+
{
78+
Console.WriteLine("Press enter to send a message, any other key to exit");
79+
var key = Console.ReadKey();
80+
Console.WriteLine();
81+
82+
if (key.Key != ConsoleKey.Enter)
83+
{
84+
break;
85+
}
86+
var orderId = new string(Enumerable.Range(0, 4).Select(x => letters[random.Next(letters.Length)]).ToArray());
87+
var shipTo = locations[random.Next(locations.Length)];
88+
var orderSubmitted = new OrderSubmitted
89+
{
90+
OrderId = orderId,
91+
Value = random.Next(100),
92+
ShipTo = shipTo
93+
};
94+
await messageSession.SendLocal(orderSubmitted);
95+
}
96+
97+
await host.StopAsync();

samples/entity-framework-core/SqlPersistence_8/Endpoint.SqlPersistence/Sender.cs

Lines changed: 0 additions & 50 deletions
This file was deleted.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
public class Order
2+
{
3+
public virtual string OrderId { get; set; }
4+
public virtual decimal Value { get; set; }
5+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Microsoft.EntityFrameworkCore;
2+
3+
public class ReceiverDataContext(DbContextOptions options) :
4+
DbContext(options)
5+
{
6+
public DbSet<Order> Orders { get; set; }
7+
public DbSet<Shipment> Shipments { get; set; }
8+
9+
protected override void OnModelCreating(ModelBuilder modelBuilder)
10+
{
11+
base.OnModelCreating(modelBuilder);
12+
13+
var orders = modelBuilder.Entity<Order>();
14+
orders.ToTable("Orders");
15+
orders.HasKey(x => x.OrderId);
16+
orders.Property(x => x.Value);
17+
18+
var shipments = modelBuilder.Entity<Shipment>();
19+
shipments.ToTable("Shipments");
20+
shipments.HasKey(x => x.Id);
21+
}
22+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
using System.ComponentModel.DataAnnotations;
3+
4+
public class Shipment
5+
{
6+
public virtual Guid Id { get; set; }
7+
8+
[Required]
9+
public virtual Order Order { get; set; }
10+
public virtual string Location { get; set; }
11+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<TargetFramework>net10.0</TargetFramework>
4+
<OutputType>Exe</OutputType>
5+
<LangVersion>preview</LangVersion>
6+
</PropertyGroup>
7+
<ItemGroup>
8+
<ProjectReference Include="..\Messages\Messages.csproj" />
9+
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.*" />
10+
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.*" />
11+
<PackageReference Include="Newtonsoft.Json" Version="13.*" />
12+
<PackageReference Include="NServiceBus.Extensions.Hosting" Version="4.0.0-alpha.2" />
13+
<PackageReference Include="NServiceBus.Persistence.Sql" Version="9.0.0-alpha.2" />
14+
<PackageReference Include="NServiceBus.Transport.SqlServer" Version="9.0.0-alpha.2" />
15+
</ItemGroup>
16+
</Project>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Threading.Tasks;
2+
using Microsoft.EntityFrameworkCore;
3+
using NServiceBus;
4+
using Microsoft.Extensions.Logging;
5+
6+
public class CompleteOrderHandler(ReceiverDataContext dataContext, ILogger<CompleteOrderHandler> logger)
7+
: IHandleMessages<CompleteOrder>
8+
{
9+
10+
public async Task Handle(CompleteOrder message, IMessageHandlerContext context)
11+
{
12+
var order = await dataContext.Orders.FindAsync(message.OrderId, context.CancellationToken);
13+
var shipment = await dataContext.Shipments.FirstAsync(x => x.Order.OrderId == order.OrderId, context.CancellationToken);
14+
15+
logger.LogInformation($"Completing order {order.OrderId} worth {order.Value} by shipping to {shipment.Location}.");
16+
}
17+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using NServiceBus;
2+
using System.Threading.Tasks;
3+
using Microsoft.Extensions.Logging;
4+
5+
public class CreateOrderHandler(ReceiverDataContext dataContext, ILogger<CreateOrderHandler> logger) :
6+
IHandleMessages<OrderSubmitted>
7+
{
8+
public Task Handle(OrderSubmitted message, IMessageHandlerContext context)
9+
{
10+
#region StoreOrder
11+
12+
var order = new Order
13+
{
14+
OrderId = message.OrderId,
15+
Value = message.Value
16+
};
17+
dataContext.Orders.Add(order);
18+
19+
#endregion
20+
21+
logger.LogInformation($"Order {message.OrderId} worth {message.Value} created.");
22+
23+
return Task.CompletedTask;
24+
}
25+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using System;
2+
using System.Linq;
3+
using NServiceBus;
4+
using System.Threading.Tasks;
5+
using Microsoft.Extensions.Logging;
6+
7+
public class CreateShipmentHandler(ReceiverDataContext dataContext, ILogger<CreateShipmentHandler> logger) :
8+
IHandleMessages<OrderSubmitted>
9+
{
10+
public Task Handle(OrderSubmitted message, IMessageHandlerContext context)
11+
{
12+
#region StoreShipment
13+
14+
var order = dataContext.Orders.Local.Single(x => x.OrderId == message.OrderId);
15+
16+
var shipment = new Shipment
17+
{
18+
Id = Guid.NewGuid(),
19+
Order = order,
20+
Location = message.ShipTo
21+
};
22+
dataContext.Shipments.Add(shipment);
23+
24+
#endregion
25+
26+
logger.LogInformation($"Shipment for {message.OrderId} created.");
27+
28+
return Task.CompletedTask;
29+
}
30+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System.Threading.Tasks;
2+
using NServiceBus;
3+
using Microsoft.Extensions.Logging;
4+
5+
public class OrderAcceptedHandler(ILogger<OrderAcceptedHandler> logger) :
6+
IHandleMessages<OrderAccepted>
7+
{
8+
9+
public Task Handle(OrderAccepted message, IMessageHandlerContext context)
10+
{
11+
logger.LogInformation($"Order {message.OrderId} accepted.");
12+
return Task.CompletedTask;
13+
}
14+
}

0 commit comments

Comments
 (0)