Ich habe mit dem massttransit Probe von hier gespielt https://github.com/MassTransit/Sample-ShoppingWeb Obwohl ich auf die neueste Version (3.3.5) von massttransit aktualisiert haben und alles funktioniert gut.Masstransit sagas und Entity Framework Repository Modelländerungen
Ich möchte ShoppingCartItems zu meinem ShoppingCart hinzufügen, also habe ich es dem Modell und dem Mapping so hinzugefügt. Diese
public class ShoppingCartMap :
SagaClassMapping<ShoppingCart>
{
public ShoppingCartMap()
{
Property(x => x.CurrentState)
.HasMaxLength(64);
Property(x => x.Created);
Property(x => x.Updated);
Property(x => x.UserName)
.HasMaxLength(256);
Property(x => x.ExpirationId);
Property(x => x.OrderId);
HasMany(c => c.ShoppingCartItems);
}
}
public class ShoppingCart :
SagaStateMachineInstance
{
public string CurrentState { get; set; }
public string UserName { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
/// <summary>
/// The expiration tag for the shopping cart, which is scheduled whenever
/// the cart is updated
/// </summary>
public Guid? ExpirationId { get; set; }
public Guid? OrderId { get; set; }
public Guid CorrelationId { get; set; }
public virtual List<ShoppingCartItem> ShoppingCartItems { get; set; } = new List<ShoppingCartItem>();
}
public class ShoppingCartItem
{
public Guid? Id { get; set; }
public string Name { get; set; }
public Guid? OrderId { get; set; }
}
wird beim Start ausgeführt wird:
SagaDbContextFactory sagaDbContextFactory =
() => new SagaDbContext<ShoppingCart, ShoppingCartMap>(SagaDbContextFactoryProvider.ConnectionString);
_repository = new Lazy<ISagaRepository<ShoppingCart>>(
() => new EntityFrameworkSagaRepository<ShoppingCart>(sagaDbContextFactory));
Das Problem, das ich bekommen eine Fehlermeldung, das Modell geändert hat. Wenn ich die Datenbank lösche und die Lösung von Grund auf neu starte, funktioniert es, aber ich möchte nicht immer meine gesamte DB löschen, wenn ich eine Änderung in meiner Sagaklasse machen muss.
Mein Plan ist, mein ShoppingCart durch die Saga zu bauen, und wenn ich meinen fertigen Zustand erreiche, werde ich den Saga-Kontext (ShoppingCart) verwenden, um reale Aufträge zu erstellen und aufrechtzuerhalten. Vielleicht mache ich das alles falsch und habe das ganze Konzept der Sagas missverstanden? Wenn ja, wie würde man über Sagen mit komplexen Objektgraphen verfahren?