Я полный noob для Fluent NHibernate, и я использую шаблон объекта запроса на основе рекомендации. Который я тоже новичок. Я постараюсь, чтобы примеры кода были краткими и полезными.Условные ограничения в Fluent NHibernate с использованием шаблона объекта запроса
Класс пользователя:
public class User {
public Guid ID { get; set; }
public string Name { get; set; }
}
Видимость:
public enum VisibilityType {
Anybody,
OwnersOnly,
Nobody
}
Класс автомобиля:
public class Car {
public Guid ID { get; set; }
public VisibilityType Visibility { get; set; }
public ICollection<User> Owners { get; set; }
}
Поэтому мне нужно написать условный метод ограничения для объекта запроса. Возвратите все автомобили, у которых есть VisibilityType.Public
, но если у автомобиля есть Visibility
значение свойства VisibilityType.OwnersOnly
, ограничьте возврат к тем пользователям, которые принадлежат к этой группе.
Вот текущий метод ограничения, что я работаю, но без условия:
public class CarQueryObject
{
private User user { get; set; }
private const string OwnersProperty = "Owners";
private const string OwnersIDProperty = "Owners.ID";
public CarQueryObject RestrictToOwners()
{
// How do I add a conditional criteria here? Only restrict by owner
// if the QueryObject has VisibilityType.OwnersOnly? Note that it should
// *NOT* restrict VisibilityType.Anybody
CreateOwnersAlias();
Criteria.Add(Restrictions.Eq(OwnersIDProperty, user.Id));
return this;
}
public CarQueryObject JoinFetchOwned()
{
Criteria.SetFetchMode(OwnersProperty, FetchMode.Join);
return this;
}
public void CreateOwnersAlias()
{
Criteria.CreateAlias(OwnersProperty, OwnersProperty, JoinType.LeftOuterJoin);
JoinFetchOwned();
}
}
_?