Hi,

I am using NHibernate 3.1.0 and have a simple set of POCOs similar to the
following

public class AppointmentDO
{
    public string Reason
    {
         get; set;
    }

   public IList<AppointmentUser> Users
   {
       get; set;
   }
}

public class AppointmentUserDO
{
    public string name { get; set; }
    public long UserId { get; set; }
}

The Nhibernate mapping for AppointmentDO is

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Persistence" assembly="SystemServices">
  <class name="AppointmentDO" table="dbo.APPOINTMENTS"
optimistic-lock="version" dynamic-update="true" lazy="true">
    <id name="Id" column="Appointment_ID">
      <generator class="assigned" />
    </id>
    <version name="Rev" column="REV" />
    <property name="Reason" column="REASON" />
    <bag name="Users" cascade="all" inverse="false">
      <key column="APPOINTMENT_ID"></key>
      <one-to-many class="AppointmentUserDO" />
    </bag>
  </class>
</hibernate-mapping>

I am using Session.Query to get all appointments for members from a
particular list {member1, member2,...}
The criteria looks like
                            var UserIds = InputVals.Split(new char[] { ','
}, StringSplitOptions.RemoveEmptyEntries);
                            var UserIdList = new List<long>();
                            UserIds.ToList().ForEach(a =>
UserIdList.Add(Convert.ToInt64(a)));
                            criteria.Add(x =>
x.Users.Any<AppointmentUserDO>(y=> UserIdList.Contains(y.UserId )));

When I pass a single value in the InputVals I get the appropriate result,
but when I pass more than one UserId in InputVals (comma separated) the
generated query misses out on the value. The intercepted queries are below

-- GOOD CASE---

select TOP (@p0) sysappoin0_.Appointment_ID as Appointm1_80_,
sysappoin0_.REV as REV80_, sysappoin0_.SUBJECT as SUBJECT80_,
sysappoin0_.START_TIME as START5_80_, sysappoin0_.END_TIME as END6_80_,
sysappoin0_.ROOM as ROOM80_, sysappoin0_.PRIORITY_E as PRIORITY8_80_,
sysappoin0_.APPOINTMENT_STATUS_E as APPOINTM9_80_,
sysappoin0_.RECURRENCE_RULE as RECURRENCE10_80_, sysappoin0_.FACILITY_ID as
FACILITY12_80_, sysappoin0_.ANNOTATIONS as ANNOTAT13_80_,
sysappoin0_.DESCRIPTION as DESCRIP14_80_, sysappoin0_.CATEGORY_E as
CATEGORY15_80_, sysappoin0_.CREATED_BY as CREATED16_80_,
sysappoin0_.CREATED_DATE as CREATED17_80_, sysappoin0_.MODIFIED_BY as
MODIFIED18_80_, sysappoin0_.MODIFIED_DATE as MODIFIED19_80_,
sysappoin0_.STATUS_E as STATUS20_80_, sysappoin0_.REASON as REASON80_,
sysappoin0_.EXT_OID as EXT22_80_ from dbo.sys_APPOINTMENTS sysappoin0_ where
sysappoin0_.STATUS_E=@p1 and (exists (select sysuserap1_.USER_ID,
sysuserap1_.APPOINTMENT_ID from dbo.sys_USER_APPOINTMENTS sysuserap1_ where
sysappoin0_.Appointment_ID=sysuserap1_.APPOINTMENT_ID and
(sysuserap1_.USER_ID in (@p2)))) order by sysappoin0_.START_TIME desc;
;@p0 = 500 [Type: Int32 (0)], @p1 = 1 [Type: Int32 (0)], @p2 = 100011 [Type:
Int64 (0)]

-- FAILING CASE --

select TOP (@p0) sysappoin0_.Appointment_ID as Appointm1_80_,
sysappoin0_.REV as REV80_, sysappoin0_.SUBJECT as SUBJECT80_,
sysappoin0_.START_TIME as START5_80_, sysappoin0_.END_TIME as END6_80_,
sysappoin0_.ROOM as ROOM80_, sysappoin0_.PRIORITY_E as PRIORITY8_80_,
sysappoin0_.APPOINTMENT_STATUS_E as APPOINTM9_80_,
sysappoin0_.RECURRENCE_RULE as RECURRENCE10_80_, sysappoin0_.FACILITY_ID as
FACILITY12_80_, sysappoin0_.ANNOTATIONS as ANNOTAT13_80_,
sysappoin0_.DESCRIPTION as DESCRIP14_80_, sysappoin0_.CATEGORY_E as
CATEGORY15_80_, sysappoin0_.CREATED_BY as CREATED16_80_,
sysappoin0_.CREATED_DATE as CREATED17_80_, sysappoin0_.MODIFIED_BY as
MODIFIED18_80_, sysappoin0_.MODIFIED_DATE as MODIFIED19_80_,
sysappoin0_.STATUS_E as STATUS20_80_, sysappoin0_.REASON as REASON80_,
sysappoin0_.EXT_OID as EXT22_80_ from dbo.sys_APPOINTMENTS sysappoin0_ where
sysappoin0_.STATUS_E=@p1 and (exists (select sysuserap1_.USER_ID,
sysuserap1_.APPOINTMENT_ID from dbo.sys_USER_APPOINTMENTS sysuserap1_ where
sysappoin0_.Appointment_ID=sysuserap1_.APPOINTMENT_ID and
(sysuserap1_.USER_ID in (@p2)))) order by sysappoin0_.START_TIME desc;
;@p0 = 500 [Type: Int32 (0)], @p1 = 1 [Type: Int32 (0)]

Error: Must declare the scalar variable "@p2".


Thanks for your patience and help,
~Vikas

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to