NServiceBus 5.2 Hibernate 流畅映射

NServiceBus 5.2 Nhibernate fluent mapping

请帮忙?我的 NServiceBus 端点是:

    public class EndpointConfig : IConfigureThisEndpoint
{
    public void Customize(BusConfiguration busConfiguration)
    {
        var windsorContainer = new WindsorContainer();
        windsorContainer.Install(new IocInstaller());

        busConfiguration.UseContainer<WindsorBuilder>(x => x.ExistingContainer(windsorContainer));

        var nhConfiguration = new NHibernate.Cfg.Configuration();
        nhConfiguration.Properties["connection.provider"] = "NHibernate.Connection.DriverConnectionProvider";
        nhConfiguration.Properties["connection.driver_class"] = "NHibernate.Driver.Sql2008ClientDriver";
        nhConfiguration.Properties["dialect"] = "NHibernate.Dialect.MsSql2008Dialect";
        nhConfiguration.GetClassMapping(typeof(ProductAchievementMap));

        busConfiguration.UsePersistence<NHibernatePersistence>().UseConfiguration(nhConfiguration);

        busConfiguration.UseSerialization<XmlSerializer>();
    }
}

我的处理人是:

    public class ProductAchievementAuditCommandHandler : IHandleMessages<ProductAchievementAuditCommand>
{
    public ISession Session { get; set; }

    public void Handle(ProductAchievementAuditCommand message)
    {
        var productAchievementAudit = new ProductAchievement
        {
            Id = Guid.NewGuid(),
            SapComId = message.SapComId,
            MessageId = message.MessageId
        }; 

        Session.Save(productAchievementAudit);
    }
}

我的流利映射是:

    public class ProductAchievementMap : ClassMap<ProductAchievement>
{
    public ProductAchievementMap()
    {
        Table("ProductAchievementMessage");
        Id(x => x.Id);
        Map(x => x.SapComId);
        Map(x => x.MessageId);
    }
}

我得到的错误是:"ERROR NServiceBus.GenericHost Exception when starting endpoint. System.InvalidOperationException: No NHibernate properties found in your config"。根据文档,我需要使用 busConfiguration.UsePersistence<NHibernatePersistence>().RegisterManagedSessionInTheContainer();。在处理程序中获取 public ISession Session { get; set; }。如何使流畅的映射工作?非常感谢任何帮助。

我终于明白了万岁! 关键是 NServiceBus 5.2 语法的变化 不确定这是否是最好的方法,但它确实有效。 端点配置现在看起来像这样。

    public class EndpointConfig : IConfigureThisEndpoint
{
    public void Customize(BusConfiguration busConfiguration)
    {
        var nhConfiguration = new Configuration();
        nhConfiguration.Properties["connection.provider"] = "NHibernate.Connection.DriverConnectionProvider";
        nhConfiguration.Properties["connection.driver_class"] = "NHibernate.Driver.Sql2008ClientDriver";
        nhConfiguration.Properties["dialect"] = "NHibernate.Dialect.MsSql2008Dialect";
        nhConfiguration.Properties["connection.connection_string"] = @"Data Source=SQL_DEV\DEVELOPMENT;Initial Catalog=SPM.Auditlog;Integrated Security=True";

        var newConfig = Fluently.Configure(nhConfiguration)
            .Mappings(x => {
                                x.FluentMappings.AddFromAssemblyOf<ProductAchievementMap>();
                            }).BuildConfiguration();

        busConfiguration.UsePersistence<NHibernatePersistence>().UseConfiguration(newConfig);
        busConfiguration.UsePersistence<NHibernatePersistence>().RegisterManagedSessionInTheContainer();

        var windsorContainer = new WindsorContainer();
        windsorContainer.Install(new IocInstaller());

        busConfiguration.UseContainer<WindsorBuilder>(x => x.ExistingContainer(windsorContainer));

        busConfiguration.UseSerialization<XmlSerializer>();
    }
}