2012-03-29 2 views
0
public class News 
{ 
    public virtual int Id { set; get; } 
    public virtual string Title { get; set; } 
    public virtual string Thumbnail { set; get; } 
    public virtual string Image { set; get; } 
    public virtual string NewsContent { set; get; } 
    public virtual DateTime DateCreated { set; get; } 
    public virtual bool Published { set; get; } 
    public virtual int UserCreated { set; get; } 
    public virtual Category Category { set; get; } 
    public virtual DateTime DateUpdated { set; get; } 
    public virtual int ViewCount { set; get; } 
} 

У меня есть этот класс, и я хотел бы запросить базу данных, чтобы получить результаты. вот мой вопрос:Ошибка NHibernate

 foreach (var category in categories) 
     { 
      var news = newsRepo.Query("from News n where n.Category ="+category); 
     } 

вот метод запроса.

public IQueryable<T> Query(string query) 
    { 
     IQueryable<T> queryable; 
     using (var session = SessionFactory.OpenSession()) 
     using (var transaction = session.BeginTransaction()) 
     { 
      var hql = session.CreateQuery(query); 
      var list = hql.List<T>(); 
      queryable = list.AsQueryable(); 
      transaction.Commit(); 
     } 
     return queryable; 
    } 

И он не работает.

я получаю следующее сообщение об ошибке:

could not execute query 
[ select news0_.Id as Id13_, news0_.Title as Title13_, news0_.DateCreated as DateCrea3_13_, news0_.DateUpdated as DateUpda4_13_, news0_.NewsContent as NewsCont5_13_, news0_.Published as Published13_, news0_.UserCreated as UserCrea7_13_, news0_.Image as Image13_, news0_.Thumbnail as Thumbnail13_, news0_.ViewCount as ViewCount13_, news0_.Category_id as Category11_13_ from [News] news0_ where news0_.Category_id=. ] 

Как я могу это исправить?

любые идеи?

+2

Wow вы ввели ORM для выполнения SQL-инъекций. – Phill

+0

Получите сгенерированный SQL-запрос и запустите его непосредственно в базе данных. Это должно дать более значимую ошибку о том, что не так в запросе – Andre

+0

где news0_.Category_id =. очевидно категория не пинает – DarthVader

ответ

1

Если поставить точку останова на следующей строке кода, то вы должны увидеть, что переменная category не получает инициализируется, что вы ожидаете (которое должно быть целым числом):

var news = newsRepo.Query("from News n where n.Category ="+category); 

Это в стороне , существует несколько лучших способов облегчения этого запроса. Одним из них является просто использовать Session.Get (ID) как так:

var news = Session.Get<News>(1); 

Вы также можете использовать поставщик NHibernate LINQ так:

var news = Session.Query<News>().SingleOrDefault(); 

использовать буквальный SQL или HQL только в случае крайней необходимости.

+0

Почему категория была бы int? он отображается как объект категории. и Категория заполнена. – DarthVader

+0

@DarthVader вы не можете просто конкат сущности и строки. Используйте параметры. –

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