Карта Enum как Int с беглыми NHibernate и NHibernate 3

По спецификациям HTTP GET является безопасным и идемпотентным, а POST - ни тем, ни другим. Это означает, что запрос GET может повторяться несколько раз, не вызывая побочных эффектов.

Даже если вашему серверу все равно (и это маловероятно), между вашим клиентом и сервером могут быть промежуточные агенты, у всех которых есть это ожидание. Например, прокси-серверы кэшируют данные у вашего интернет-провайдера или других поставщиков для повышения производительности.

Таким образом, запрос GET может быть кэширован (на основе определенных параметров), и если он терпит неудачу, он может быть автоматически повторен без любое изложение вредных эффектов. Итак, на самом деле ваш сервер должен стремиться выполнить этот контракт.

С другой стороны, POST небезопасен, а не идемпотентен, и каждый агент знает, что он не кэширует результаты запроса POST или не повторяет запрос POST автоматически. Так, например, транзакция с кредитными картами никогда бы никогда не была запросом GET (вы не хотите, чтобы счета дебетовали несколько раз из-за сетевых ошибок и т. Д.).

Это очень простой подход к этому , Для получения дополнительной информации вы можете рассмотреть книгу «RESTful Web Services» Руби и Ричардсона (пресс-релиз O'Reilly).

Для быстрого изучения темы REST рассмотрите этот пост:

http://www.25hoursaday.com/weblog/2008/08/17/ExplainingRESTToDamienKatz .aspx

Самое смешное, что большинство людей обсуждают достоинства PUT v POST. Проблема GET v POST и всегда была очень хорошо решена. Игнорируйте его на свой страх и риск.

23
задан Community 23 May 2017 в 12:09
поделиться

3 ответа

Простое выполнение Map( m => m.MyEnum ).CustomType<MyEnum>(), кажется, работает отлично.

Если кто-нибудь знает, почему IUserTypeConvention не работает с Fluent NHibernate в NHibernate 3, я все равно хотел бы знать, почему. Может быть, это потому, что сопоставление пользовательского типа с перечислением работает сейчас, но почему тогда его не удалили из библиотеки?

43
ответ дан Josh Close 23 May 2017 в 12:09
поделиться

Я сталкиваюсь с подобной проблемой с Nhibernate 3.0GA и FluentNh (пересобрать с последней версией NH). UserTypeConventions не регистрируются должным образом.

описанная здесь проблема: http://groups.google.com/group/nhusers/browse_thread/thread/c48da661f78bfad0

1
ответ дан vikram nayak 23 May 2017 в 12:09
поделиться

Вы должны наследовать свое соглашение не от IUserTypeConvention, а от FluentNHibernate.Conventions.UserTypeConvention.

Например, это именно то соглашение, которое я использую, чтобы отобразить логические и обнуляемые логические значения в пользовательский тип с именем UserTrueFalseType :

    /// <summary>
/// Convention: Boolean fields map to CHAR(1) T/F/Null
/// </summary>
public class BooleanTrueFalseConvention : FluentNHibernate.Conventions.UserTypeConvention<UserTrueFalseType>
{
    /// <summary>
    /// Accept field type criteria
    /// </summary>
    /// <param name="criteria"></param>
    public override void Accept(FluentNHibernate.Conventions.AcceptanceCriteria.IAcceptanceCriteria<FluentNHibernate.Conventions.Inspections.IPropertyInspector> criteria)
    {
        criteria.Expect(instance =>
            instance.Property.PropertyType.Equals(typeof(System.Boolean))
            ||
            instance.Property.PropertyType.Equals(typeof(System.Nullable<System.Boolean>))
        );
    }
}

Это работает с NH 3.3 и последней версией Свободно.

0
ответ дан A. Chiesa 23 May 2017 в 12:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: