Excellent! Glad we got there in the end. On Tue, Jan 27, 2009 at 12:23 PM, Luis Abreu <lab...@gmail.com> wrote:
> James, thanks for your time! As always, the mistake was mine: the error > were coming from the snapshot classes which also had inheritance. > > > > Thanks again. > > > > > > *From:* fluent-nhibernate@googlegroups.com [mailto: > fluent-nhibern...@googlegroups.com] *On Behalf Of *James Gregory > *Sent:* terça-feira, 27 de Janeiro de 2009 12:12 > > *To:* fluent-nhibernate@googlegroups.com > *Subject:* [fluent-nhib] Re: Need some explanations about LazyLoad method > > > > That looks right to me, and you have NotLazyLoaded set on the main class > too? > > > > In my setup I've got default-lazy to true, the parent class set to false, > and all the subclasses also set to false. That works for me. > > On Tue, Jan 27, 2009 at 12:08 PM, Luis Abreu <lab...@gmail.com> wrote: > > I'm seeing the lazy="false" on the XML but I'm still getting the same error > if I don't set the default-lazy to false. Btw, here's the mapping of one of > the subclasses: > > > > DiscriminateSubClassesOnColumn("TipoEntidade", (Int32) (EntityKind.Single)) > > .SubClass<Individual>((Int32) (EntityKind.Single), > > e => > > { > > e.Map(ind => ind.BirthDate, > "DataNascimento"); > > e.Component<BIInfo>(ind => > ind.BIInfo, > > bi => > > { > > > bi.Map(b => b.Archive, "Arquivo") > > > .WithLengthOf(100); > > > bi.Map(b => b.EmissionDate, "DataEmissao") > > > .WithLengthOf(50); > > > bi.Map(b => b.Number, "BI") > > > .WithLengthOf(20); > > }); > > e.SetAttribute( "lazy", > "false" ); > > }) > > .SubClass<Company>((Int32)(EntityKind.Company), e => > e.SetAttribute("lazy", "false") ); > > > > See anything wrong? > > > > Thanks. > > > > > > *From:* fluent-nhibernate@googlegroups.com [mailto: > fluent-nhibern...@googlegroups.com] *On Behalf Of *James Gregory > *Sent:* terça-feira, 27 de Janeiro de 2009 11:49 > > > *To:* fluent-nhibernate@googlegroups.com > *Subject:* [fluent-nhib] Re: Need some explanations about LazyLoad method > > > > You didn't mention it was a subclass that was failing! Subclasses also have > their own lazy attribute as well as their parent class, and I can now see we > haven't mapped a way to handle this in FNH. > > > > You SHOULD do something like this (but can't right now): > > > > DiscriminateSubClassesOnColumn("TipoEntidade") > > .SubClass<Individual>(subclass => > > { > > subclass.Map(...); > > * subclass.NotLazyLoaded();* > > }); > > > > However, as you can't do that currently, you can use SetAttribute instead. > > > > subclass.SetAttribute("lazy", "false"); > > I'll look into getting this implemented properly. Let me know if the set > attribute hack works. > > > > On Tue, Jan 27, 2009 at 11:36 AM, Luis Abreu <lab...@gmail.com> wrote: > > > Hello again. > > > You're not going to like this answer... it works for me! > > Yep, I don't like that answer :) > > Ok, back to my code. First, I'm not using sessionsource because the > assembly > is not signed and since it has dependencies on non-signed assemblies I > cannot sign it here. So, I'm just getting the XML from the mappings by > using > code similar to this: > > var currentTypes = GetType().Assembly.GetTypes(); > > var methodsThatReturnXmlDocs = currentTypes > .Where(existingType => GetMethodForExecution(existingType) > != null) > .Select(existingType => GetMethodForExecution(existingType)) > .ToList(); > foreach (var method in methodsThatReturnXmlDocs) { > var mappingVisitor = new MappingVisitor(); > mappingVisitor.Conventions.DefaultLazyLoad = false; //HAD TO ADD THIS > var doc = method(mappingVisitor); > configuration.AddDocument(doc); > } > > > Ok, here's the XML my mappings are generating: > > > <?xml version="1.0" encoding="utf-8"?> > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" > assembly="Sra.Core.Entities" namespace="Sra.Core.Entities"> > <class name="Entity" table="Entidades" xmlns="urn:nhibernate-mapping-2.2" > lazy="false" discriminator-value="0"> > <id name="Id" column="IdEntidade" type="Int32" unsaved-value="0"> > <generator class="identity" /> > </id> > <discriminator column="TipoEntidade" type="Int32" /> > <version column="Version" name="Version" /> > <property name="Name" column="Nome" length="200" type="String" > not-null="true"> > <column name="Nome" /> > </property> > <property name="Nif" column="NIF" length="9" type="String" > not-null="true"> > <column name="NIF" /> > </property> > <property name="Nifap" column="Nifap" length="50" type="String" > not-null="true"> > <column name="Nifap" /> > </property> > <many-to-one cascade="save-update" name="Action" column="IdAccao" /> > <set name="Branches" access="field.camelcase-underscore" cascade="all"> > <key column="IdEntidade" /> > <one-to-many class="Sra.Core.Entities.Branch, Sra.Core.Entities, > Version=1.0.0.0, Culture=neutral, PublicKeyToken=7559314325872dac" /> > </set> > <subclass name="Sra.Core.Entities.Company, Sra.Core.Entities, > Version=1.0.0.0, Culture=neutral, PublicKeyToken=7559314325872dac" > discriminator-value="1" /> > <subclass name="Sra.Core.Entities.Individual, Sra.Core.Entities, > Version=1.0.0.0, Culture=neutral, PublicKeyToken=7559314325872dac" > discriminator-value="0"> > <property name="BirthDate" column="DataNascimento"> > <column name="DataNascimento" /> > </property> > <component name="BIInfo" insert="true" update="true"> > <property name="Number" column="BI" length="20" type="String"> > <column name="BI" /> > </property> > <property name="EmissionDate" column="DataEmissao" length="50" > type="String"> > <column name="DataEmissao" /> > </property> > <property name="Archive" column="Arquivo" length="100" > type="String"> > <column name="Arquivo" /> > </property> > </component> > </subclass> > </class> > </hibernate-mapping> > > Now here's the XML when I don't set the default lazy convention (which > means > it's set to true by default, right?): > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true" > assembly="Sra.Core.Entities" namespace="Sra.Core.Entities"> > <class name="Entity" table="Entidades" xmlns="urn:nhibernate-mapping-2.2" > lazy="false" discriminator-value="0"> > <id name="Id" column="IdEntidade" type="Int32" unsaved-value="0"> > <generator class="identity" /> > </id> > <discriminator column="TipoEntidade" type="Int32" /> > <version column="Version" name="Version" /> > <property name="Name" column="Nome" length="200" type="String" > not-null="true"> > <column name="Nome" /> > </property> > <property name="Nif" column="NIF" length="9" type="String" > not-null="true"> > <column name="NIF" /> > </property> > <property name="Nifap" column="Nifap" length="50" type="String" > not-null="true"> > <column name="Nifap" /> > </property> > <many-to-one cascade="save-update" name="Action" column="IdAccao" /> > <set name="Branches" access="field.camelcase-underscore" cascade="all"> > <key column="IdEntidade" /> > <one-to-many class="Sra.Core.Entities.Branch, Sra.Core.Entities, > Version=1.0.0.0, Culture=neutral, PublicKeyToken=7559314325872dac" /> > </set> > <subclass name="Sra.Core.Entities.Company, Sra.Core.Entities, > Version=1.0.0.0, Culture=neutral, PublicKeyToken=7559314325872dac" > discriminator-value="1" /> > <subclass name="Sra.Core.Entities.Individual, Sra.Core.Entities, > Version=1.0.0.0, Culture=neutral, PublicKeyToken=7559314325872dac" > discriminator-value="0"> > <property name="BirthDate" column="DataNascimento"> > <column name="DataNascimento" /> > </property> > <component name="BIInfo" insert="true" update="true"> > <property name="Number" column="BI" length="20" type="String"> > <column name="BI" /> > </property> > <property name="EmissionDate" column="DataEmissao" length="50" > type="String"> > <column name="DataEmissao" /> > </property> > <property name="Archive" column="Arquivo" length="100" > type="String"> > <column name="Arquivo" /> > </property> > </component> > </subclass> > </class> > </hibernate-mapping> > > And in here's the exception I'm getting whenever I set lazy to false: > > NHibernate.InvalidProxyTypeException: The following types may not be used > as > proxies: > Sra.Core.Entities.Individual: method SetName should be virtual > > Etc, etc, etc for all the properties of my class. Should I get this > exception? At first sight, it sseems like the only thing that changed is > the > default-lazy attribute, but I could be missing something... > > Oh, and btw, I've just noticed that I'm not getting a lazy=false on my > collections. I'm expecting this because the only option I have on my method > chain when defining the collection mappings is the LazyLoad method call... > > Thanks again. > Luis > > > > > > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Fluent NHibernate" group. To post to this group, send email to fluent-nhibernate@googlegroups.com To unsubscribe from this group, send email to fluent-nhibernate+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/fluent-nhibernate?hl=en -~----------~----~----~----~------~----~------~--~---