NHibernate ExcludeProperty: почему нет IncludeProperty - PullRequest
1 голос
/ 08 сентября 2010

Класс Example отлично подходит, если вы указываете, какие свойства вы хотите исключить из примера. Но что, если вы хотите указать, какие свойства включить?

Возьмите этот пример: ищите людей в базе данных с одинаковыми именами. Объект Person имеет много свойств. Поэтому, чтобы использовать объект NHibernate.Criterion.Example, мне нужно было бы указать каждое исключаемое поле, которое может быть много.

Почему нет метода IncludeProperty?

У меня есть объект Person, и я хочу посмотреть, является ли он дубликатом, основанным на предварительно установленных бизнес-правилах (FirstName, LastName, DateOfBirth). Эти правила могут быть изменены, чтобы включить почтовый индекс или что-то еще - и я хотел бы сделать это настраиваемым.

Есть ли простой способ обойти это?

1 Ответ

1 голос
/ 08 сентября 2010

У меня есть решение проблемы IncludeProperty:

private Type persitentType = typeof(T);
public IList<T> GetByExample(T exampleInstance, params string[] propertiesToInclude)
{
    // get the properties that will be excluded
    List<string> propertiesToExclude =
        persitentType.GetProperties().Where(p => propertiesToInclude.Contains(p.Name) == false).Select(p => p.Name).ToList();

    // create the criteria based on the example and excluding the given properties
    ICriteria criteria = NHibernateSession.CreateCriteria(persitentType);
    Example example = Example.Create(exampleInstance);
    foreach (string propertyToExclude in propertiesToExclude)
    {
        example.ExcludeProperty(propertyToExclude);
    }
    criteria.Add(example);

    // return the result 
    return criteria.List<T>();
}

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

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