Nhibernate.linq Session.Query игнорировать not.lazyload - PullRequest
0 голосов
/ 27 июня 2011

Я использую SharpArch, я расширил репозиторий, добавив следующие методы:

    public IQueryable<T> FindAll(Expression<Func<T, bool>> expression)
{
  var queryable = Session.Query<T>();
  return queryable.Where(expression);
}

 public IQueryable<T> FindAll(ISpecification<T> specification)
{
  var queryable = Session.Query<T>();
  return specification.SatisfyingElementsFrom(queryable);
}

Теперь я могу использовать лямбда-выражения и спецификации с nibernate.linq:

 var printers = repository.FindAll(x => x.IpAddress != null).ToList();

Моя проблемаявляется то, что он игнорирует Not.Lazyload моей карты сущностей.

Вместо этого, если я использую FindAll со словарем, предоставленным sharpArc, он работает правильно без ленивой загрузки.

Используя отражение, это то, что они делают:

 public virtual IList<T> FindAll(IDictionary<string, object> propertyValuePairs)
{
  Check.Require((propertyValuePairs != null) && (propertyValuePairs.Count > 0), "propertyValuePairs was null or empty; it has to have at least one property/value pair in it");
  ICriteria criteria = this.Session.CreateCriteria(typeof(T));
  foreach (string str in propertyValuePairs.Keys)
  {
    if (propertyValuePairs[str] != null)
    {
      criteria.Add(Restrictions.Eq(str, propertyValuePairs[str]));
    }
    else
    {
      criteria.Add(Restrictions.IsNull(str));
    }
  }
  return criteria.List<T>();
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011

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

Я также публикую это на тот случай, если другие придут к этому вопросу.

Вот действительно отличная статья о стремлении получить с помощью NHibernate.Linq.Я не уверен, если это проблема с вашими отображениями.

0 голосов
/ 28 июня 2011

Вы можете попробовать использовать Session.QueryOver <> вместо Session.Query <>. Я попытаюсь выкопать сообщение, которое я прочитал некоторое время назад, но если я правильно помню, Query не соблюдает все инструкции в сопоставлениях? Пока?.

Я опубликую больше здесь, если найду соответствующую статью ... надеюсь, это поможет в то же время.

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