it's indeed not a lazy loading issue... the problem is that the DataContract
has one or more properties that are defined as IEnumerable<T>, but the
DataContractSerializer will choke on that if those references are actually
instances of DelayedEnumerator<T>.

If DelayedEnumerator were public, you could use the [KnownType] attribute on
your IEnumerable properties to make sure the DataContractSerializer can deal
with DelayedEnumerator types.

However, since there is no valid reason to make DelayedEnumerator public, i
would opt to return arrays instead of ienumerable instances in your
datacontracts, and just do a .ToArray() when you're assembling your
CatalogsForSite object.  Your DataContracts shouldn't mention anything about
an implementation detail of your persistence layer IMO.

On Mon, Jul 27, 2009 at 12:15 AM, mhnyborg <[email protected]> wrote:

>
> I am not new to NH or the way lazy load works.
>
> I work in a group of 6 developers and we have been working since new
> year with NH over WCF and Silverlight as the UI.
>
> when I call var c = stypes.Any(); I can see from the unit test that NH
> is calling the databasen and that I have the corect data in all the
> DelayedEnumerator.result list.
>
> So it's not a lazy load problem.
>
> On Jul 26, 11:56 pm, "Erich Eichinger" <[email protected]> wrote:
> > how exactly do you expect a Future to work over a webservice with
> marshalling in between? You should rethink your context boundaries - usually
> when crossing an AppDomain boundary you should already have all data you
> need in place and ready for marshalling them. Any form of lazy evaluation
> will hardly work over the wire
> >
> > -Erich
> >
> >
> >
> > > -----Original Message-----
> > > From: [email protected] [mailto:[email protected]] On
> > > Behalf Of mhnyborg
> > > Sent: Sunday, July 26, 2009 11:41 PM
> > > To: nhusers
> > > Subject: [nhusers] Future<T> is not playing nice with web-services
> >
> > > First I love how easy it is to use Future<T> but I think it's only
> > > half baked. or put in another way only implemented for server side
> > > code that is not returning a list.
> >
> > > I have this code that's is returning a lot of simple catalogs for
> > > comboboxes
> >
> > > OperationContract]
> > > public CatalogsForSite GetCatalogsForSite()
> > > {
> > > CatalogsForSite catalogsForSite;
> > > using (var s = sessionManager.OpenSession())
> > >  {
> > >    var stypes = s.CreateCriteria(typeof
> > > (ServitudeType)).Future<ServitudeType>();
> > >    var ptypes = s.CreateCriteria(typeof
> > > (ProtectionLineType)).Future<ProtectionLineType>();
> > >    var cSysTypes = s.CreateCriteria(typeof(CSys)).Future<CSys>();
> > >    var coordinatPrecissionTypes = s.CreateCriteria(typeof
> > > (CoordinatPrecissionType)).Future<CoordinatPrecissionType>();
> > >    var levelPrecissionTypes = s.CreateCriteria(typeof
> > > (LevelPrecissionType)).Future<LevelPrecissionType>();
> > >    var siteTypes =
> > > s.CreateCriteria(typeof(SiteType)).Future<SiteType>
> > > ();
> > >    There is more ....
> >
> > >    // this is done to make NH do the querys. DO this while the
> > > session
> > > is open
> > >    var c = stypes.Any();
> >
> > >    catalogsForSite = new CatalogsForSite
> > >  {
> > >    StdNotes = stdNotes,
> > >    SiteStatus = siteStatus,
> > >    Phases = phases,
> > >    ProbabilityTypes = probabilityTypes,
> > >    SystemTypes = systemTypes,
> > >    RevisionTypes = revisionTypes,
> > >    EnvironmentClassifications = environmentClassifications,
> > >    ProjectClassifications = projectClassifications,
> > >    MilestoneHolidays = milestoneHolidays,
> > >    There is more ...
> > > }
> >
> > > }
> >
> > > return catalogsForSite
> > > }
> >
> > > The problem is that Future<T> is returning
> > > NHibernate.Impl.DelayedEnumerator and that is not a type expected by
> > > the webservice.
> > > If the result on the DelayedEnumerator class was public then maybe I
> > > could use that.
> >
> > > Hope to get some help with this.- Hide quoted text -
> >
> > - Show quoted text -
> >
>

--~--~---------~--~----~------------~-------~--~----~
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