2016-10-28 2 views
1

У меня есть SQL-запрос, и я пытаюсь преобразовать его в запрос Nhibernate и запустить его.Преобразование SQL-запроса в NHibernate

SQL Query

SELECT 
    A.* 
FROM 
    TestTable i 
LEFT JOIN 
    TestTable o 
ON 
    i.testColumn=o.testcolumn and i.testColumn1='TestColumn1'  
WHERE  o.StartDate <= '2016-10-28' and i.testColumn2 > 3 

Nhibertnate Запрос

Objecta является # версии объекта C из TestTable

ObjectA o = null; 
ObjectA i = null; 

var query = Session.QueryOver(() => o) 
      .Left.JoinQueryOver(() => i) 
      .Where(() => o.testColumn == i.testColumn) 
      .Where(() => i.testColumn1 == "TestColumn1") 
      .Where(() => i.testColumn2 == 3 
      .Where(() => o.StartDate <= '2016-10-28') 
         return query.Take(100).List(); 

Сопоставления

public ObjectATableMap : ClassMap<ObjectA> 
    { 
     Schema("[Test]"); 
     Table("[TestTable]"); 

     Id(x => x.Id, "Id").GeneratedBy.Native(); 
     Map(x => x.TestColumn1, "TestColumn1"); 
    Map(x => x.TestColumn2, "TestColumn2"); 
    Map(x => x.StartDate ,"StartDate"); 

     } 

Когда я бегу Abov e я получаю следующее сообщение "не удалось разрешить свойство: i of: ObjectA" Может ли кто-нибудь предоставить мне правильный запрос на спящий режим. Благодаря

+0

Показать сопоставление –

+0

'JoinQueryOver' ожидает выражение с свойством, которое имеет отношение. Вы можете увидеть пример здесь http://stackoverflow.com/a/5420791/1486443 – Najera

+0

Отображения @RadimKohler Отображение – Sike12

ответ

1

ошибку:

"could not resolve property: i of: ObjectA"

связано с утверждением

Session.QueryOver(() => o) 
     .Left.JoinQueryOver(() => i) 

, потому что он ожидает, что class ObjectA (о) имеет отношение к class ObjectA (I). Обычно родитель ребенка

public class ObjectA 
{ 
    public virtual ObjectA Parent { get; set; } 
    ... 
} 

Если нет никакого отношения - мы не можем использовать QueryOver API. Мы можем использовать HQL

Это не про хороший C# API, как QueryOver есть, но он будет работать.

+1

Спасибо @Radim Kohler – Sike12

Смежные вопросы