LINQ к NHibernate, “получают массивом идентификаторов” запрос

LiquiBase - ваш лучший выбор. Он имеет режим интеграции hibernate , который использует hbm2ddl Hibernate для сравнения вашей базы данных и вашего отображения hibernate, но вместо автоматического обновления базы данных он выводит файл журнала изменений в liquibase, который можно проверить перед фактическим запуском.

Хотя это и удобнее, любой инструмент, который выполняет сравнение вашей базы данных и ваших отображений гибернации, может ошибаться. См. http://www.liquibase.org/2007/06/the-problem-with-database-diffs.html для примеров. С помощью liquibase вы создаете список изменений базы данных по мере разработки в формате, который может выдержать код с ответвлениями и слияниями.

13
задан Community 23 May 2017 в 12:16
поделиться

3 ответа

Помните, что NHibernate наследует ваши классы и не использует их напрямую согласно своей реализации IList. Вероятно, это не то, что вы хотите услышать, но поскольку ваши классы проксируются, а текущая реализация Linq вообще не обрабатывает это правильно, в этом и заключается проблема.

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

Я знаю, что вы сделали после исправления, но, к сожалению, в этом случае ответ - дождаться завершения NHibernate 2.1 или использовать обходной путь, как вы делаете сейчас.

6
ответ дан 2 December 2019 в 00:03
поделиться

Насколько я понимаю, текущая реализация Linq to NHibernate довольно ограничена.
В настоящее время пытаются переписать его с последним обновлением, доступным здесь:

Linq To NHibernate Update

1
ответ дан 2 December 2019 в 00:03
поделиться

Черт. Я забыл добавить решение, которое работает:

public virtual IList<TEntity> GetByMultipleIds(int[] ids)
{
    var result = Session
      .CreateCriteria(typeof (TEntity))
      .Add(Restrictions.In("Id", ids))
      .List<TEntity>();

    result = ids.Join //to order list by passed ids
      (result, id => id, r => r.Id, (i, r) => r).ToList();

    return result;
}
8
ответ дан 2 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: