【问题标题】:Modifying how nHibernate saves Saga data in nServiceBus修改 nHibernate 如何在 nServiceBus 中保存 Saga 数据
【发布时间】:2014-08-29 23:41:45
【问题描述】:

我在向 nServiceBus 发送消息时遇到问题,消息数据字段长度可变。 nServiceBus 正在使用 nHibernate 创建一个名为

的表
[NServiceBus].[PendingMentorEmailSagaData] 

来自一个名为 PendingMentorEmailSagaData 的类。但是,消息字段设置为 nvarchar(255),我正在寻找一种将其设置为 nvarchar(MAX) 的方法。

我尝试使用嵌入式 hbm 文件,但收到“persistent class PendingMentorEmailSagaData not found”错误。

这可能意味着我也无法确定要设置文件的类。

hbm 文件:

<?xml version="1.0" encoding="utf-8" ?>

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
      <class name="PendingMentorEmailSagaData">
        <id name="Id" />
        <property name="OriginalMessageId" />
        <property name="Originator" />
        <property name="PendingMentorEmailCommandId" />
        <property name="JobBoardCode" />
      </class>
    </hibernate-mapping>

PendingMentorEmailSagaData 是 saga 的数据类的名称。

【问题讨论】:

  • 我简化的问题是如何覆盖 nservicebus 的 nhibernate 功能,以在它的 exportschema 中创建表的方式。我尝试添加程序集和命名空间也没有运气。程序集是项目名称,命名空间是数据类的命名空间,对吧?

标签: c# nhibernate nservicebus hbm


【解决方案1】:
  1. 在 saga 所在的同一项目中创建 PendingMentorEmailSagaData.hbm.xml 文件,例如:
    <?xml version="1.0" encoding="utf-8"?>
    <hibernate-mapping xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:nhibernate-mapping-2.2">
      <class name="MY_NAMESPACE.PendingMentorEmailSagaData, MY_ASSEMBLY_NAME" table="PendingMentorEmailSagaData" dynamic-update="true" optimistic-lock="all">
        <id name="Id" type="Guid">
          <generator class="assigned" />
        </id>
        <property name="Originator" />
        <property name="OriginalMessageId" />
        <property name="LargeText" type="StringClob" />
      </class>
    </hibernate-mapping>

2。将该文件标记为嵌入式资源

【讨论】:

  • 是有道理的,包括更多关于在哪里可以找到类应该修复它的信息,但是我决定换档并采用 fluentnhibernate 方法,结果证明它更容易工作 100 倍。
  • @RandomUs1r 我有兴趣了解更多关于您如何设法将 fluentnhibernate 与 NServiceBus 一起使用?
  • 好吧,我们尝试继承类的类映射,即 nhibernate 基于其功能读取 hbm 文件的方式。然而,也没有得到这个工作,实现了一个解决方法,其中消息数据不会持久保存到 saga 中,而是在需要发送消息时调用。这只是因为我只需要发送最新消息,因此数据库中的数据是最新的,但是下次我遇到这个时,我将尝试实现一个类映射或一个 hbm 文件,以免执行解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多