Hi, everybody, I have a problem when I map a class to another class
with one-to-many. My parent class has a IList of child, and each child
has a composite id, like this:

///Parent class
 public class Tab
    {
        #region Basic info properties
        public virtual int TabId
        {
            get;
            set;
        }

        public virtual IList<ModuleInstance> Modules
        {
            get;
            set;
        }
    }

///Child class
public class ModuleInstance
    {
        public virtual int ModuleInstanceId
        {
            set;
            get;
        }

        public virtual int TabId
        {
            set;
            get;
        }

        public virtual string Title
        {
            get;
            set;
        }

        public virtual IList<ModuleInstance> Observers
        {
            get;
            set;
        }

        public override bool Equals(object obj)
        {
            ModuleInstance comparer = obj as ModuleInstance;

            if (comparer == null)
                return false;

            if (comparer.TabId == TabId && comparer.ModuleInstanceId
== ModuleInstanceId)
                return true;

            return false;
        }

        public override int GetHashCode()
        {
            return (TabId + ModuleInstanceId).GetHashCode();
        }
    }

With mapping file:

<class name="Tab" table="Tab">
    <id name="TabId" column="TabId">
      <generator class="native" />
    </id>

    <bag name="Modules" inverse="true" cascade="all" lazy="false">
      <key column="TabId"/>
      <one-to-many class="ModuleInstance"/>
    </bag>
  </class>

<class name="ModuleInstance" dynamic-update="true" dynamic-
insert="true">
   <composite-id>
      <key-property name="ModuleInstanceId" type="int"/>
      <key-many-to-one name="TabId" class="Tab"/>
    </composite-id>

    <property name="Title" type="String" length="120"/>

    <bag name="Observers" cascade="all" lazy="false">
                 <key>
                    <column name="ObserverModuleId"/>
                   <column name="TabId"/>
                </key>
                <one-to-many class="ModuleInstance"/>
    </bag>
</class>


I can insert parent class successfully, but when I load an object of
parent class, I get a error:

[InvalidCastException: Specified cast is not valid.]
   (Object , Object[] , SetterCallback ) +273
   NHibernate.Bytecode.Lightweight.AccessOptimizer.SetPropertyValues
(Object target, Object[] values) +58
   NHibernate.Tuple.Component.PocoComponentTuplizer.SetPropertyValues
(Object component, Object[] values) +124
   NHibernate.Type.ComponentType.SetPropertyValues(Object component,
Object[] values, EntityMode entityMode) +58
   NHibernate.Type.ComponentType.ResolveIdentifier(Object value,
ISessionImplementor session, Object owner) +332
   NHibernate.Type.ComponentType.NullSafeGet(IDataReader rs, String[]
names, ISessionImplementor session, Object owner) +77
   NHibernate.Loader.Loader.GetKeyFromResultSet(Int32 i,
IEntityPersister persister, Object id, IDataReader rs,
ISessionImplementor session) +213
   NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet,
ISessionImplementor session, QueryParameters queryParameters, LockMode
[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects,
EntityKey[] keys, Boolean returnProxies) +301
   NHibernate.Loader.Loader.DoQuery(ISessionImplementor session,
QueryParameters queryParameters, Boolean returnProxies) +1423
   NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections
(ISessionImplementor session, QueryParameters queryParameters, Boolean
returnProxies) +114
   NHibernate.Loader.Loader.LoadCollection(ISessionImplementor
session, Object id, IType type) +362

[GenericADOException: could not initialize a collection:
[Portalviet.Data.Entity.Tab.Modules#2][SQL: SELECT modules0_.TabId as
TabId1_, modules0_.ModuleInstanceId as ModuleIn1_1_,
modules0_.ModuleInstanceId as ModuleIn1_6_0_, modules0_.TabId as
TabId6_0_, modules0_.Title as Title6_0_, modules0_.Module as
Module6_0_, modules0_.Pane as Pane6_0_, modules0_.[Order] as
Order6_6_0_, modules0_.DisplayContainer as DisplayC7_6_0_,
modules0_.IsAdminModule as IsAdminM8_6_0_, modules0_.Container as
Container6_0_, modules0_.Icon as Icon6_0_,
modules0_.IsInheritPagePermisson as IsInher11_6_0_,
modules0_.BackgroundColor as Backgro12_6_0_, modules0_.AllowPrint as
AllowPrint6_0_, modules0_.AllowSyndicate as AllowSy14_6_0_,
modules0_.AllowPublish as AllowPu15_6_0_, modules0_.IsDeleted as
IsDeleted6_0_ FROM ModuleInstance modules0_ WHERE
modules0_.tab...@p0]]
 
Portalviet.Data.Providers.SqlDataProvider.DataSourceBase.GetEntityById
(String entityName, Object id) in F:\Projects\WebApp\Portalviet\System
\Data\SqlDataProvider\DataSourceBase.cs:166
   Portalviet.Data.Providers.SqlDataProvider.SqlTabDao.GetTabById
(Int32 id) in F:\Projects\WebApp\Portalviet\System\Data\SqlDataProvider
\SqlTabDao.cs:33
   Portalviet.Data.Business.TabBL.GetTabById(Int32 tabId) in F:
\Projects\WebApp\Portalviet\System\Data\Business\TabBL.cs:28
   Portalviet.Data.CacheLayer.TabCL.GetTabById(Int32 tabId) in F:
\Projects\WebApp\Portalviet\System\Data\Portalviet.Data.CacheLayer
\TabCL.cs:28
   _Default.OnInit(EventArgs e) in f:\Projects\WebApp\Portalviet\System
\Portalviet\Default.aspx.cs:21
   System.Web.UI.Control.InitRecursive(Control namingContainer) +333
   System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+378

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" 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/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to