2015-04-27 1 views
1

Вот первая ситуацияПочему интерфейс NHibernate IQueryOver <T> «Где» доступно в одном контексте, а в другом нет?

using (ISession session = NHibernateHelper.OpenSession()) 
{ 
    using (ITransaction transaction = session.BeginTransaction()) 
    { 
     session.QueryOver<T>().Where() // all ok 

    } 
} 

Вот тот же интерфейс, но в другом классе

productRepository.ExecuteQuery(over => 
{ 
    IQueryOver<Product> inOtherContext = over; 
    inOtherContext.Where // where method not exists 
}); 

Я уверен, что нет никаких проблем с пространствами имен.

ответ

0

Решение здесь было бы использовать немного другой интерфейс

IQueryOver<Product, Product> 

Например, мы можем увидеть, как это работает в док в 16.5. Aliases:

Cat catAlias = null; 

IQueryOver<Cat,Cat> catQuery = 
    session.QueryOver<Cat>(() => catAlias) 
    .... 

Проверьте source code here

/// <summary> 
/// QueryOver&lt;TRoot,TSubType&gt; is an API for retrieving entities by composing 
/// <see cref="Criterion.Expression" /> objects expressed using Lambda expression syntax 
/// </summary> 
/// <remarks> 
/// <code> 
/// IList&lt;Cat&gt; cats = session.QueryOver&lt;Cat&gt;() 
///  .Where(c =&gt; c.Name == "Tigger") 
///  .And(c =&gt; c.Weight > minWeight)) 
///  .List(); 
/// </code> 
/// </remarks> 
public interface IQueryOver<TRoot,TSubType> : IQueryOver<TRoot> 
{ 
    ... 
+0

спасибо !!!!!!!!!!!!!!!!!!!!!!!!!! –

+0

Отлично, если это так или иначе помогло, сэр! Наслаждайтесь могучим NHibernate;) –

+0

вот что мне нужно. вы потрясающий мужчина;) –