Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Custom SQL NHibernate


Автор: Geny 16.12.2009, 13:41
Имею вот такой меппинг:
Код

  <class name="ClassTable" table="Table">
    <id name="Id" column="id">
      <generator class="native"/>
    </id>
    <property name="Shortname"  column="SHORTNAME" not-null ="false" insert ="false" update ="false"/>
    <loader query-ref="myQuery"/>
  </class>
  
  <sql-query name="myQuery">
    <return alias="tab" class="ClassTable">
      <return-property name="Id" column="myId"></return-property>
      <return-property name="Shortname" column="myShortname"></return-property>
    </return>
    select tab.id as myId, tab.SHORTNAME as myShortname
    from Table tab where tab.id  = ? order by tab.SHORTNAME
  </sql-query>

Я думаю что при выполнении session.CreateCriteria мне вернется заполненный объект так как я определил в "myQuery", но мне возвращается заполненный объект просто как
Код

SELECT * FROM Table

а если я меняю меппинг, на такой
Код

  <class name="ClassTable">
    <id name="Id" column="id">
      <generator class="native"/>
    </id>
    <property name="Shortname"  column="SHORTNAME" not-null ="false" insert ="false" update ="false"/>
    <loader query-ref="myQuery"/>
  </class>
  
  <sql-query name="myQuery">
    <return alias="tab" class="ClassTable">
      <return-property name="Id" column="myId"></return-property>
      <return-property name="Shortname" column="myShortname"></return-property>
    </return>
    select tab.id as myId, tab.SHORTNAME as myShortname
    from Table tab where tab.id  = ?
  </sql-query>

т.е. убираю свойство table="Table", то NHibernate строит неправильный SQL запрос:
Код

SELECT * FROM ClassTable


и естественно не работает потому что такой таблицы нет.

Кто подскажет, что я неправильно делаю

Спасибо.

Автор: Artorius 18.12.2009, 21:00
А ты чего хочешь добиться, убирая table="Table"?

Если покопаться в исходниках NHibernate, то можно найти вот это (ClassBuilder.cs):
Код

        private string GetClassTableName(PersistentClass model, HbmClass classSchema)
        {
            if (classSchema.table == null)
                return mappings.NamingStrategy.ClassToTableName(model.EntityName);
            else
                return mappings.NamingStrategy.TableName(classSchema.table.Trim());
        }


Не укажешь таблицу явно - по дефолту присвоится имя класса

Автор: KuMa1104 29.12.2009, 17:37
Здравствуйте.
Вопрос не по теме но всё таки.

Можете кинуть ссылку на какоинибудь хороший ресурс про NHibernate/
Желательно на русском языке.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)