У меня есть запрос, который по соображениям производительности мне нужно создать фактическую команду с использованием необработанного ADO.NET (он включает параметры, возвращающие табличное значение). С LINQ to SQL или EF я мог просто передать DbDataReader
, который был возвращен DbCommand.ExecuteReader()
, методу DataContext.Translate<T>(DbDataReader)
или ObjectContext.Translate<T>(DbDataReader)
, и он преобразовал бы набор результатов в объекты , возвращая IEnumerable<T>
.
Есть ли в NHibernate эквивалентный API, которому я могу передать DbDataReader
/ IDataReader
или даже DbCommand
/ IDbCommand
и получить обратно объекты NHibernate?
Или, возможно, есть способ перехватить построение команды, созданной ISession.CreateQuery(string)
, чтобы я мог изменить базовый DbCommand
, чтобы он работал так, как мне нужно?
1 ответ
Вероятно, вы можете создать собственный тип пользователя для обработки возвращающего табличное значение параметра.
NHibernate не предоставляет преобразование DataReader -> entity в каких-либо общедоступных методах.
IUserType.NullSafeSet()
имеет параметр типа IDbCommand
, который мне нужен для добавления параметра табличного значения.
session.CreateSQLQuery("SELECT * FROM Customers WHERE Id IN (SELECT Value FROM :tableType)")
. Но для этого требуется вызов IQuery.AddEntity()
и тому подобное. Я попытался переместиться на один уровень абстракции вверх, используя HQL со следующим: session.CreateQuery("FROM Customers WHERE Id IN (SELECT Value FROM :tableType)")
, но это выдает Antlr.Runtime.NoViableAltException
. Я хочу перейти к тому моменту, когда я смогу использовать это из LINQ, но разве HQL не является следующим логическим шагом? Может мне нужно пропустить HQL?
Похожие вопросы
Новые вопросы
.net
НЕ используйте для вопросов о .NET Core - используйте вместо этого [.net-core]. .NET Framework - это программная среда, предназначенная главным образом для операционной системы Microsoft Windows. Он включает в себя реализацию библиотеки базовых классов, общеязыковой среды выполнения (обычно называемой CLR), общей системы типов (обычно называемой CTS) и динамической среды исполнения. Он поддерживает множество языков программирования, включая C #, VB.NET, F # и C ++ / CLI.
CreateSQLQuery
?