Я думаю, что ответом на ваш вопрос является использование «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 + "'";
Я использовал перехватчики для подобных задач:
Перехватчик, который изменяет загруженные объекты:
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 выпусках, но я, может казаться, не нахожу ссылку прямо сейчас.
Поскольку никто, кажется, не может ответить на Ваш вопрос в данный момент, я думал, что предложу реструктурировать Ваш код для устранения необходимости Порядка вычислить свой собственный налог.
Вы могли делегировать его к OrderTaxService, который берет объект Порядка и возвращает объект OrderValue или что-то вдоль тех строк.
Это сохранит логику в Вашем домене, но устранит необходимость присоединить его к Вашим объектам Порядка.
Я соглашаюсь с Garry, что необходимо удалить сервисные зависимости из объектов области как можно больше. Иногда это имеет смысл, такой как шифрование/дешифрование. В этом случае можно скрыть его в инфраструктуре с помощью перехвата или IUserType. Я думаю, что последний благоприятен, когда можно использовать его. Эта статья показывает подробно, как сделать это. Я делаю это, и это работает довольно прекрасное.