Свободное отображение NHibernate для свойств только для чтения - PullRequest
1 голос
/ 25 января 2011

Я недавно перешел на 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 зависит от другого значения, полученного из базы данных.

Iтакже видели альтернативы, такие как 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 не ищет сеттер, когда он не указан, а отображает частные / защищенные сеттеры.

Любые инструкции о том, как это сделать?

Ответы [ 2 ]

1 голос
/ 25 января 2011

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

UPDATE Я только что выполнил тест и PropertyInfo.CanWrite возвращает true для защищенных и частных сеттеров. Так что я не уверен, что действительно есть проблема с решением, которое вы опубликовали.

1 голос
/ 25 января 2011

Выходит ли CustomerValue из базы данных как производное значение?

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

...