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.