2016-07-10 3 views
0

여기에서 masstransit 샘플을 가지고 놀았습니다. https://github.com/MassTransit/Sample-ShoppingWeb masstransit의 최신 버전 (3.3.5)으로 업데이트되었지만 모든 것이 잘 작동합니다.Masstransit sagas 및 Entity Framework 리포지토리 모델 변경

내 ShoppingCart에 ShoppingCartItems를 추가하여 모델 및이 매핑에 추가했습니다.

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; } 
} 

이것은 시작에 실행 :

SagaDbContextFactory sagaDbContextFactory = 
       () => new SagaDbContext<ShoppingCart, ShoppingCartMap>(SagaDbContextFactoryProvider.ConnectionString); 

      _repository = new Lazy<ISagaRepository<ShoppingCart>>(
       () => new EntityFrameworkSagaRepository<ShoppingCart>(sagaDbContextFactory)); 

내가 얻을 문제는 모델이 변경되었습니다라는 오류 메시지입니다. 내가 데이터베이스를 드롭하고 처음부터 솔루션을 실행하면 작동하지만 나는 내 사가 클래스에서 변경해야 할 때마다 내 전체 DB를 드롭 싶지 않아.

내 계획은 무용담을 통해 내 쇼핑 카트를 구축하는 것이며 완료된 상태에 도달하면 무용담 컨텍스트 (ShoppingCart)를 사용하여 실제 주문을 만들고 유지합니다. 어쩌면 나는이 모든 잘못을 겪고 서사의 전체 개념을 이해하지 못했을 까? 그렇다면 복합 객체 그래프를 가진 무용담에 대해 어떻게 생각하나요?

답변

1

사가 지속성은 매핑에 따라 사가 인스턴스 개체를 일부 테이블에 저장합니다. 퍼시스턴스 계층의 자체 스키마 업데이트 도구를 사용하여이를 수정할 수 있습니다. 저는 이것이 MassTransit과 아무 상관이 없다고 생각합니다. EF의 경우 EF 코드 우선 마이그레이션을 사용할 수 있습니다. NH의 경우 기본 제공 스키마 업데이트를 사용할 수 있습니다. MondoDb 또는 RavenDb와 같은 문서 데이터베이스의 경우 아무 것도하지 않습니다.

어쨌든 이것을 일반적인 데이터베이스 스키마 변경 작업으로 생각하십시오. 당신은 다른 데이터베이스 스키마 변경과 같이 그것에 약간의 노력을 기울여야합니다. 예를 들어, 스키마를 업데이트 할 때 기존의 사가를 수정하는 데 필요한 마이그레이션을 고려해야합니다. 다른 스키마 변경에 대해서는이 문제를 해결할 스크립트 나 코드가 필요합니다. 스키마 데이터베이스 또는 모든 변경 사항에 대한 코드는 필요하지 않지만 최소한 기존의 사가 문서를 변경해야하는 경우에도 마찬가지입니다.

관련 문제