как вы называете (и наносите на карту) вспомогательное свойство? - PullRequest
0 голосов
/ 22 декабря 2011

В некоторых случаях у меня есть свойство, которое требует "вспомогательного свойства" по практическим соображениям.

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

Допустим,

public class Person
{
    private string __name;

    protected internal virtual string _name
    {
        get
        {
            return this.__name;
        }
        set
        {
            this.__name = value;
        }
    }

    public virtual string Name
    {
        get
        {
            return _name;
        }

        set
        {
            _name = value;

            // action when changing the name takes place here...
        }
    }
}

Таким образом, свойство "_name" сопоставляется с базой данных, но сохраняется внутренним, чтобы его нельзя было изменить напрямую. А второе публичное свойство «Имя» обеспечивает фактический доступ.

Причина, по которой я настроил его таким образом, заключается в том, что если бы это действие было встроено непосредственно в метод set сопоставленного свойства "_name", оно было бы запущено, когда объект гидратируется из базы данных, а это не то, что я хотят.

Это все отлично работает как таковое.

Проблема в том, что при запросе этого типа попытка запроса Person.Name не будет работать, поскольку это свойство не сопоставлено!

Что мне не нравится в этом, так это то, что вы пишете код для Person.Name, но должны писать запросы к Person._name, что подвержено ошибкам и сбивает с толку.

Есть ли лучший способ решить эту проблему?

1 Ответ

0 голосов
/ 22 декабря 2011

Можете ли вы использовать nosetter.camelcase-underscore для доступа в отображении?Это установит поле непосредственно (если указано правильно, например, _name) вместо использования установщика свойств.

например:

<property name="Name" column="Name" type="String" access="nosetter.camelcase-underscore"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...