Создание провайдера Linq-> HQL - PullRequest
3 голосов
/ 16 июня 2010

У меня есть клиентское приложение, которое подключается к серверу.Сервер использует Hibernate для сохранения и запросов, поэтому у него есть набор аннотированных объектов Hibernate для сохранения.

Клиент отправляет запросы HQL на сервер и получает ответы обратно.У клиента есть автоматически сгенерированный набор объектов, которые соответствуют объектам гибернации сервера для результатов запроса и базовой персистенции.

Я хотел бы поддержать использование Linq для запросов, а также Hql, поскольку это делает запросы более безопасными и быстрымипостроить (больше нет опечаток в строковых запросах HQL).Я посмотрел вокруг на следующее, но не могу понять, как заставить их соответствовать тому, что у меня есть.

  • Провайдер Linq от NHibernate - требует использования NHibernate ISession и ISessionFactory, чего я не делаюиметь
  • LinqExtender - требует много аннотаций на объектах и ​​расширение базового типа, слишком инвазивных

То, что я действительно хочу, это то, что будет генерировать, дает мне очень легко обрабатыватьструктура для построения запросов HQL.Я прочитал большую часть 15-страничной статьи, написанной одним из разработчиков C #, о том, как создавать собственные провайдеры, и это довольно чревато, в основном из-за сложности дерева выражений.

Может кто-нибудь предложить подход дляреализовать перевод Linq -> HQL?Возможно, библиотека, которая превратит дерево выражений во что-то более SQL / HQLish.

Я бы хотел поддержать выбор / из / где / группировать / упорядочить по / объединяет.Не слишком беспокоюсь о подзапросах.

Ответы [ 2 ]

1 голос
/ 18 июня 2010

Итак, я обнаружил, что эта библиотека переустановлена, и именно это NHibernate использует для реализации своих функций LINQ.Кажется, что это убирает много шума вокруг выражения, хотя, кажется, есть немало, чтобы сделать реализацию сверху.

re-linq

1 голос
/ 16 июня 2010

Я не думаю, что есть какая-либо библиотека, которая делает это. Вы можете написать свой собственный провайдер. Существуют наборы инструментов, которые помогут вам в написании такого провайдера. Например, IQToolkit . Но учтите, что написание собственного провайдера все равно будет большой работой. Я не уверен, стоит ли это инвестиций.

...