Внедрение зависимости с объектами NHibernate

Я думаю, что ответом на ваш вопрос является использование «DBNull.Value», как указано выше, что-то вроде этого;

            string cm = "SELECT column1, column2, column3 FROM mytablename WHERE column1='"
           + DBNull.Value + "' AND column2='" + DBNull.Value + "' OR column1='" + sR[mSSI]
           + "' AND column2='" + DBNull.Value + "'";
8
задан Tigraine 4 December 2008 в 12:41
поделиться

3 ответа

Я использовал перехватчики для подобных задач:

Перехватчик, который изменяет загруженные объекты:

public class MyInterceptor : EmptyInterceptor
{
    public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        return InjectDependencies(entity as MyEntity);
    }
}

Свяжите его с сессией:

nhSessionFactory.OpenSession(myInterceptor);

Я также считал где-нибудь, что была бы лучшая поддержка пользовательской инжекции конструктора в предстоящих 2,1 выпусках, но я, может казаться, не нахожу ссылку прямо сейчас.

8
ответ дан 5 December 2019 в 17:42
поделиться

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

Вы могли делегировать его к OrderTaxService, который берет объект Порядка и возвращает объект OrderValue или что-то вдоль тех строк.

Это сохранит логику в Вашем домене, но устранит необходимость присоединить его к Вашим объектам Порядка.

1
ответ дан 5 December 2019 в 17:42
поделиться

Я соглашаюсь с Garry, что необходимо удалить сервисные зависимости из объектов области как можно больше. Иногда это имеет смысл, такой как шифрование/дешифрование. В этом случае можно скрыть его в инфраструктуре с помощью перехвата или IUserType. Я думаю, что последний благоприятен, когда можно использовать его. Эта статья показывает подробно, как сделать это. Я делаю это, и это работает довольно прекрасное.

1
ответ дан 5 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

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