Nano Hash - криптовалюты, майнинг, программирование

Можно ли заставить NHibernate выполнять запросы как EF?

Можно ли в любом случае использовать NHibernate таким образом, чтобы он выполнял запрос/запросы только после использования возвращаемого объекта запроса/оператора... так же, как EF?

В большинстве случаев с EF он не будет отправлять и выполнять фактический запрос к базе данных до тех пор, пока не будет использован возвращенный объект linq-"оператор".. например:

var x = for e in entities.MyTable
select e;

Это еще не выполнено!
Это означает, что я могу модифицировать x-объекты "linq-query", как мне нравится, без фактического "извлечения" каких-либо данных из базы данных:

x = x.Where(i=>i.SomeThing = someThing);

Еще не казнен!

x.ToList<MyTable>()

Теперь его исполняют!

Но в NHibernate запрос выполняется, как только транзакция закрывается или фиксируется, как я понял... и в большинстве случаев это уже сделано в репозитории. Таким образом, вы не можете просто в любом другом месте изменить запрос, а затем отправить его в базу данных. Потому что запрос уже отправлен, и это означает, что позже вы можете изменить только то, что «отображается» в результате.

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

Заранее огромное спасибо!

08.12.2011

  • Вы не можете выполнить запрос в EF, если вы закрыли контекст в репозитории. Так что поведение такое же. 08.12.2011

Ответы:


1

Вы можете попробовать что-то подобное, используя отдельный QueryOver

var query = QueryOver.Of<Customer>()
    .Where(x => x.LastName == "Smith"); // query is not executed yet

query.GetExecutableQueryOver(session).List();

Хорошо, что вы можете передавать объекты QueryOver и выполнять их в другом месте.

08.12.2011
  • Если я правильно понимаю, это позволяет выполнять запрос в моем коде в любое время?.. Если да, то, если я буду создавать множество QueryOvers повсюду, то как NHibernate узнает, какой из них выполнять?.. или будет ли он просто выполнять их все ... или мне нужно будет вернуть объект запроса, а затем позже иметь возможность просто ввести query.GetExecutableQueryOver(session).List(); выполнить его? 08.12.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..