.net 向Saga数据添加复杂类型

.net 向Saga数据添加复杂类型,.net,nservicebus,nservicebus-sagas,.net,Nservicebus,Nservicebus Sagas,我正试图用包含复杂类型的SagaData创建一个传奇 例如: public class MySagaData : IContainSagaData { public virtual Guid Id { get; set; } public virtual string Originator { get; set; } public virtual string OriginalMessageId { get; set; } public ComplexType M

我正试图用包含复杂类型的SagaData创建一个传奇

例如:

public class MySagaData : IContainSagaData
{
    public virtual Guid Id { get; set; }
    public virtual string Originator { get; set; }
    public virtual string OriginalMessageId { get; set; }
    public ComplexType MyComplexType { get; set; }
}

这可能吗?如果是这样的话,你如何映射这一点?这是一个反模式吗?我还没有在网上找到任何关于这样做的资源,这让我相信我遗漏了一些东西。

这是可能的,我的团队经常这样做。这在某种程度上取决于您的持久性设置

如果您使用的是RavenDB,它应该可以正常工作。我们更进一步,会有一个列表(ComplexType),RavenDB会毫无问题地存储它


如果你在做NHibernate,你可能需要做一些额外的映射来完成这项工作,因为NHibernate本身对对象的序列化和保存方式有一些限制/约定(我对NHibernate不太熟悉,因为我们总是使用RavenDB来进行saga持久化)。

这是可能的,我的团队经常这样做。这在某种程度上取决于您的持久性设置

如果您使用的是RavenDB,它应该可以正常工作。我们更进一步,会有一个列表(ComplexType),RavenDB会毫无问题地存储它


如果您正在使用NHibernate,您可能需要执行一些额外的映射来实现这一点,因为NHibernate本身对对象的序列化和保存方式有一些限制/约定(我对NHibernate不太熟悉,因为我们总是使用RavenDB进行saga持久化。)

问题出在哪里?如果您使用NHibernate持久性(我可以从您的“虚拟”属性中怀疑这一点),这也会起作用,但是这个mycmlextype也需要是虚拟的。恩希伯内特在这方面相当聪明。如果您使用RavenDb持久性,它甚至更好,您的Saga数据实际上没有限制,也不需要虚拟属性。如果使用Azure存储,则无法使用复杂类型。问题是什么?如果您使用NHibernate持久性(我可以从您的“虚拟”属性中怀疑这一点),这也会起作用,但是这个mycmlextype也需要是虚拟的。恩希伯内特在这方面相当聪明。如果您使用RavenDb持久性,它甚至更好,您的Saga数据实际上没有限制,也不需要虚拟属性。如果使用Azure存储,则不能使用复杂类型。