NServiceBus: Как расширить масштаб для десятичного столбца? - PullRequest
0 голосов
/ 06 октября 2011

Мы используем десятичные числа со шкалой из шести знаков после запятой, то есть 1.123456.Теперь, когда мы используем NServiceBus и нам нужно сохранить это значение в наших саг данных, у нас возникли проблемы.

Когда мы возвращаемся к саге и снова получаем наше значение, оно равно 1.12345.Я не нашел никого, кто сталкивался бы с такой же проблемой, но я думаю, что это не может быть уникальным случаем.

Мои данные саги выглядят как,

public class MySagaData : IContainSagaData
{
    public virtual Guid Id { get; set; }
    public virtual string Originator { get; set; }
    public virtual string OriginalMessageId { get; set; }
    public virtual int Property1 { get; set; }
    public virtual decimal Property2 { get; set; }
}

Дело в том, что когда Property21.123456, и он сохраняется в моей саге, возвращаясь к саге и забирая его, затем Property2 равен 1.12345.

Я знаю, почему это происходит, NHibernate создает поле базы данных, DECIMAL(19, 5), но я не знаю, как решить мою проблему.Я не хочу создавать таблицу самостоятельно, но пусть NServiceBus сделает это за меня.

Кто-нибудь?

1 Ответ

2 голосов
/ 06 октября 2011

Я думаю, вам придется создать собственный диалект для NHibernate, если вы хотите изменить способ отображения десятичных знаков по умолчанию.Например, если вы используете сервер SQL, посмотрите на MsSql2000Dialect.cs в исходном коде Nhibernate.Вы можете видеть, что он определяет десятичный столбец следующим образом:

RegisterColumnType(DbType.Decimal, "DECIMAL(19,5)");

Вы можете увидеть пример того, как сделать это здесь, в Java.Это в основном то же самое в C # http://shashivelur.com/blog/2008/08/override-hibernate-sql-types-mapping/

После того, как вы создали свой собственный диалект, вам просто нужно настроить его в конфигурации NHibernate:

nhCibfig.SetProperty(Environment.Dialect, typeof(MyCustomDecimalDialect).AssemblyQualifiedName)

или

<property name="dialect">MyAssembly.MyCustomDecimalDialect, MyAssembly</property>
...