2010-02-22 4 views
0

Я получаю следующую ошибку: «Сообщение: значение не указано для одного или нескольких требуемых параметров». когда я пытаюсь проверить код из MBUnit.Как указать значение для параметра в Named Query для NHibernate

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="myApplication.Core" namespace="studentTrak"> 


    <class name="UniversityCourse" table="UniversityCourse" lazy="true"> 

    <id name="Id" column="ID" type="int"> 
     <generator class="native" /> 
    </id> 

    <property name="Name" column="Name" type="string" not-null="true"/> 
    <property name="Description" column="Description" type="string" /> 


    <many-to-one name="BestStudent" class="Student"/> 
    <loader query-ref="GetBestStudent"/> 

    </class> 
    <sql-query name="GetBestStudent" callable="true"> 
    <return class="Student"> 
    </return> 
    SELECT * FROM BestStudents WHERE CourseId = ? 
    </sql-query> 
</hibernate-mapping> 

Код для лица является:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace studentTrak 
{ 
    public class UniversityCourse 
    { 

     public virtual int Id { get; set; } 
     public virtual String Description { get; set; } 
     public virtual String Name {get;set;} 


     public virtual Student BestStudent 
     { 
      get; 
      set; 
     } 
    } 
} 

Как обеспечить значение, что с именем потребности запроса?

ответ

2

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

Что-то вроде этого:

IQuery q = session.GetNamedQuery ("GetBestStudent"); 
q.SetInt32 (0, someCourseId); // since the parameter has no name, you'll have to use the position of the parameter. 
var result = q.UniqueResult<Student>(); 
+0

ОК идеально .... так как я обеспечиваю значение параметра? – MadSeb

+0

проблема заключается в том, что у меня нет доступа к «сеансу» из моего кода по некоторым причинам ... поэтому мне нужно установить параметр из отображения ... любым способом сделать это? – MadSeb

+0

SELECT * FROM BestStudents WHERE CourseId = 5 – Will

Смежные вопросы