그것은 오랜 시간이왔다 - 나는 그것을 좋아하지 않는 이유는 정확하게! NServiceBus 2.0 동안 나는 my own saga handler that uses XML serialization instead이라고 썼습니다. RavenDB는 문서 데이터베이스이므로 이러한 문제가 없습니다.
그러나 메모리에서 일어나는 일은 NHibernate가 한 테이블 내에 문자열 목록을 저장할 수 없으므로 두 번째 테이블을 만들어 데이터를 표준화 할 수 있어야합니다.
수동으로 생성하는 경우 SagaId 및 StringValue가있는 테이블을 만들고 SagaSupplementCode라고합니다. NHibernate는 이것을 어떻게하는지 알아낼 수 없다.
이와 비슷한 것을 만든다면, NHibernate가 그것을 저장할 수있을 것이라고 생각합니다.
public class MySagaData
{
public virtual Guid Id { get; set; }
public virtual string Originator { get; set; }
public virtual string OriginalMessageId { get; set; }
public virtual string TransactionReference { get; set; }
public virtual string CvvNumber { get; set; }
public virtual List<SupplementCode> SupplementCodes { get; set; }
}
public class SupplementCode
{
public virtual Guid Id { get; set; }
public virtual string Code { get; set; }
}
클래스를 추가하면 NHibernate에서 테이블 이름을 기반으로하고 사가 데이터 테이블과 관련이 있습니다. 에는 ID 열이 있어야하며 오토 맵핑을 사용하려면이어야합니다. 이어야합니다. 당신의 무용담 데이터가 같은 여러 테이블로 분할됩니다 경우 데이터베이스가 현재 보유해야하기 때문에 (주석 주셔서 감사합니다 안드레아스!) 사가 데이터에
다른 방법
경합은, NHibernate에있는 큰 문제가 될 수 있습니다 여러 테이블에 대한 잠금.
"SupplementCodes"는 상당히 기본적인 것 같습니다. 쉼표로 구분 된 목록을 하나의 문자열로 사용하도록 사가 저장소를 변경할 수 있다면 NHiberante는이를 하나의 테이블에 저장할 수 있으며 성능 및 잠금 관점에서 더 나아질 수 있습니다.
오토 맵핑이 작동하려면 SupplementsCode의 공용 가상 GUID 등록 정보가 필요합니다. –
쉼표로 구분 된 목록 접근 방식에 +1을 입력하십시오. –
ID 열을 반영하는 대답이 업데이트되었습니다. 감사합니다 안드레아스! –