nHibernate - итерация свойств класса для общего добавления параметров хранимой процедуры. - PullRequest
0 голосов
/ 28 октября 2010

Я хочу иметь класс, который определяет данные моего параметра для хранимой процедуры. Это будет очень простой объект:

public class MyQueryData : SprocObjectBase
{
   public int Value1 { get; set; }
   public string Value2 { get; set; }
   public bool Value3 { get; set; }
...
}

Он будет наследоваться от базового класса с общими значениями, такими как имя.

public abstract class SprocObjectBase
{
   public string SprocName { get; set; }
}

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

Затем я хочу иметь возможность перебирать свойства объекта и добавлять значения параметров в мой запрос, предполагая, что имена свойств являются моими именами параметров sproc. Итак, мой код выглядит примерно так:

    public void Execute<T>(T entity) where T : SprocObjectBase
    {
        IQuery query = Session.GetNamedQuery(entity.SprocName);

        var properties = typeof(T).GetProperties();

        foreach (var prop in properties)
        {
            //??????????????
        }

        query.ExecuteUpdate();
    }

У меня вопрос: как использовать query.SetParameter<>() с информацией о свойствах внутри цикла foreach для общего добавления каждого свойства в качестве параметра к хранимой процедуре?

EDIT: Мое текущее использование, которое не компилируется, выглядит так:

query.SetParameter<prop.GetType()>(prop.Name, prop.GetValue(entity, null));

1 Ответ

1 голос
/ 28 октября 2010

Я не пробовал, но что-то вроде этого должно работать:

    foreach (var prop in properties)
    {
        query.SetParameter(prop.Name, prop.GetValue(entity, null));
    }

Кстати, до сих пор вам не нужно делать метод универсальным. Вы все равно используете отражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...