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