Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 nhibernate, ошибка "No persister for: ....  [new]
acc2003
Member

Откуда:
Сообщений: 121
В базе есть хранимка, которая считает и возвращает 2 столбца данных: QuestionId, ClassType

В клиенте есть класс:
    public class QuestionType
    {
        int intQuestionId;
        int intClassType;

        public virtual int QuestionId
        {
            get { return intQuestionId; }
            set { intQuestionId = value; }
        }

        public virtual int ClassType
        {
            get { return intClassType; }
            set { intClassType = value; }
        }
    }

В какой-то момент я хочу выполнить хранимку (ORM - nhibernate) и на выходе получить класс QuestionType:
 QuestionType questionType = (QuestionType)ses.CreateSQLQuery(strSql).AddEntity(typeof(QuestionType)).UniqueResult();

Получаю ошибку:
NHibernate.MappingException was unhandled
Message="No persister for: Cati.Bll.QuestionType"

Вопрос: в чем проблема?
Нужно как-то замапить, что QuestionId в хранимке равен QuestionId в классе?
Если да, то как?
Что QuestionId, что ClassType - вычисляемые в хранимке значения и ни какой таблице не соответствуют.
31 мар 09, 15:59    [7000169]     Ответить | Цитировать Сообщить модератору
 Re: nhibernate, ошибка "No persister for: ....  [new]
acc2003
Member

Откуда:
Сообщений: 121
Вообще, как грамотнее поступить в данном случае, когда ORM - nhibernate и нужно получить список обьектов - результат выполнения хранимой процедуры, не основанный на какой-либо таблице?
1 апр 09, 12:15    [7004690]     Ответить | Цитировать Сообщить модератору
 Re: nhibernate, ошибка "No persister for: ....  [new]
uмя пoльзoвaтeля
Member

Откуда:
Сообщений: 3
acc2003,

1) Скачиваем исходник нхибернейта
2) Заходим в папку src/Nhibernate/NHibernate.Tests
3) ищем поиском в этой папке по ключевым словам - StoredProcedure
находите файлик HandSQLTest и читаете тесты, а заодно маппинг

Если после этого вопросы останутся, то опять задаёте их здесь
1 апр 09, 17:01    [7007359]     Ответить | Цитировать Сообщить модератору
 Re: nhibernate, ошибка "No persister for: ....  [new]
acc2003
Member

Откуда:
Сообщений: 121
uмя пoльзoвaтeля,

Ок, спасибо!
Именно HandSQLTest не нашел - покурил другие файлики.

Вроде заработало!
1 апр 09, 20:07    [7008379]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: nhibernate, ошибка "No persister for: ....  [new]
Ex_Soft
Member

Откуда:
Сообщений: 7712
NHibernate-2.1.2.GA-src\src\NHibernate.Test\SqlTest\Custom\Oracle\Mappings.hbm.xml

	<database-object>
		<create>
			CREATE OR REPLACE PROCEDURE employmentsForRegion(rows OUT SYS_REFCURSOR, p_regionCode EMPLOYMENT.REGIONCODE%TYPE)
			AS
			BEGIN
			OPEN rows FOR
			SELECT EMPLOYEE, EMPLOYER, STARTDATE, ENDDATE,
			REGIONCODE, EMPID, VALUE, CURRENCY
			FROM EMPLOYMENT
			WHERE REGIONCODE = p_regionCode;
			END;
		</create>
		<drop>
			DROP PROCEDURE employmentsForRegion
		</drop>
	</database-object>

моя SP
create or replace procedure Test_Procedure (cur out sys_refcursor, arg number)
as
begin
  insert into Victim
  (Id, Val)
  values
  (arg, arg);
  
  open cur for
    select * from dual;
end;
NHibernate-2.1.2.GA-src\src\NHibernate.Test\SqlTest\Custom\Oracle\StoredProcedures.hbm.xml

	<sql-query name="selectEmploymentsForRegion">
		<return alias="emp" class="Employment">
			<return-property name="employee" column="EMPLOYEE"/>
			<return-property name="employer" column="EMPLOYER"/>
			<return-property name="startDate" column="STARTDATE"/>
			<return-property name="endDate" column="ENDDATE"/>
			<return-property name="regionCode" column="REGIONCODE"/>
			<return-property name="employmentId" column="EMPID"/>
			<return-property name="salary">
				<return-column name="VALUE"/>
				<return-column name="CURRENCY"/>
			</return-property>
		</return>
		{ call employmentsForRegion(:regionCode) }
	</sql-query>

мой
  <sql-query name="CallTestProcedure">
    <return alias="CallTestProcedure" class="Test.Dual, Test">
      <return-property name="Dummy" column="DUMMY"/>
    </return>
    { call aspnetuser.test_procedure(:arg) }
  </sql-query>
дергаю
IQuery
	query = session.GetNamedQuery("CallTestProcedure");

query.SetParameter("arg", 99);

Dual
	result = query.UniqueResult<Dual>();
Получаю выше означенный exception Картинка с другого сайта.
Сакраментальный вопрос: Кто виноватЪ? Что делатЪ?
16 апр 10, 17:56    [8643397]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить