Плавное отображение NHibernate для свойств только для чтения

Я недавно перешел на Fluent NHibernate 1.1 с 1.0, и в миграции есть некоторые критические изменения.

Например, поля в модели предметной области, такие как

    public virtual string CustomerType
    {
        get { return /*computed value based on _Type which is a column in database */; }

    }

    public virtual string MemberType
    {
        get { return _Type; }
        set { _Type = value; }

    }

используется для нормальной работы без указания какой-либо конфигурации / соглашения. Теперь выдает ошибку «Не удалось найти сеттер». Я вижу решения, в которых создается переменная-член, такая как customerType или _customerType, или, если на то пошло, вставляется защищенный установщик.

Обратите внимание, что CustomerType зависит от другого значения, полученного из базы данных.

Я также видел альтернативы, такие как http://support.fluentnhibernate.org/discussions/help/269-fluentnhibernate-11-automapper-doesnt-accept-read-only-properties-anymore, где DefaultAutoMappingConfiguration переопределяется, например

   public override bool ShouldMap(Member member)
    {
        if (member.IsProperty && !member.CanWrite)
        {
            return false;
        }

        return base.ShouldMap(member);
    }

Но это означает, что другие поля с частными или защищенными сеттерами вообще пропускаются при отображении.

Я ищу решение, в котором Fluent NHibernate не ищет сеттер, если он не указан, а отображает частные / защищенные сеттеры.

Есть какие-нибудь указания, как это сделать?


person WorldIsRound    schedule 24.01.2011    source источник


Ответы (2)


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

ОБНОВЛЕНИЕ Я только что провел тест и PropertyInfo.CanWrite вернул истину для защищенных и частных установщиков. Так что я не уверен, что с уже опубликованным решением действительно есть проблема.

person Vadim    schedule 25.01.2011

Берется ли CustomerValue из базы данных, поскольку это производное значение?

Если он не удалит виртуальный и исключит его из сопоставления.

person Bronumski    schedule 24.01.2011
comment
да. Это производное значение из столбца в базе данных. Я тоже обновил вопрос. - person WorldIsRound; 25.01.2011