Hola a todos,
Estoy utilizando NHibernate con Visual Basic .NET por primera vez
(siempre lo había hecho con C#), y después de unos días me he
encontrado con el siguiente problema.
Tengo una clase Family con una colección de objetos de tipo Product.
El código de la clase es el siguiente:
Public Class Family : Implements IEquatable(Of Family)
'Atributos de clase'
Private thisId As Long
Private thisName As String
Private thisProducts As IList(Of Product) = New List(Of Product)
''' <summary>
''' Constructor de clase.
''' </summary>
''' <remarks></remarks>
Public Sub New()
End Sub
#Region "Propiedades de clase"
'Propiedades de clase'
''' <summary>
''' Definición de método de acceso para el uso de nhibernate.
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Overridable Property Id()
Get
Return Me.thisId
End Get
Set(ByVal value)
Me.thisId = value
End Set
End Property
Public Overridable Property Name()
Get
Return Me.thisName
End Get
Set(ByVal value)
Me.thisName = value
End Set
End Property
Public Overridable Property Products()
Get
Return Me.thisProducts
End Get
Set(ByVal value)
Me.thisProducts = value
End Set
End Property
...
El fichero de mapeo de esta clase es:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="dataGeslimes"
assembly="dataGeslimes">
<class name="Family" table="FAMILY">
<id name="Id" column="FAMILY_ID" type="long" >
<generator class="native" />
</id>
<property name="Name" column="NAME" type="String" unique="true"/>
<bag name="Products" cascade="all" inverse="true" lazy="false">
<key column="FAMILY_ID"/>
<one-to-many class="Product"/>
</bag>
</class>
</hibernate-mapping>
El problema es que cuando intento guardar en la base de datos un
objeto de tipo Family, con la colección de Products vacía, me lanza un
error de que no puede convertir la PersistentBag especificada en el
mapping a la IList de mi clase en Visual Basic. Tengo mapeos
exactamente iguales en otros proyectos en C#, y nunca me había dado
este problema. Además en Google tampoco he encontrado nada.
¿Sabéis a qué se puede deber?
La StackTrace del error es la siguiente:
No se puede convertir un objeto de tipo
'NHibernate.Collection.PersistentBag' al tipo
'System.Collections.Generic.IList`1[dataGeslimes.Product]'.
[InvalidCastException: No se puede convertir un objeto de tipo
'NHibernate.Collection.PersistentBag' al tipo
'System.Collections.Generic.IList`1[dataGeslimes.Product]'.]
dataGeslimes.Family.set_Products(Object value) in C:\Documents and
Settings\cesar.IRICOM\Mis documentos\Visual Studio 2005\Projects
\dataGeslimes\dataGeslimes\domain\Family.vb:56
(Object , Object[] , SetterCallback ) +65
NHibernate.Bytecode.Lightweight.AccessOptimizer.SetPropertyValues(Object
target, Object[] values) +20
NHibernate.Persister.Entity.AbstractEntityPersister.SetPropertyValues(Object
obj, Object[] values) +82
[MappingException: Invalid mapping information specified for type
dataGeslimes.Family, check your mapping file for property type
mismatches]
NHibernate.Persister.Entity.AbstractEntityPersister.SetPropertyValues(Object
obj, Object[] values) +174
NHibernate.Impl.SessionImpl.DoSave(Object theObj, EntityKey key,
IEntityPersister persister, Boolean replicate, Boolean
useIdentityColumn, CascadingAction cascadeAction, Object anything)
+620
NHibernate.Impl.SessionImpl.DoSave(Object obj, Object id,
IEntityPersister persister, Boolean useIdentityColumn, CascadingAction
cascadeAction, Object anything) +444
NHibernate.Impl.SessionImpl.SaveWithGeneratedIdentifier(Object obj,
CascadingAction action, Object anything) +349
NHibernate.Impl.SessionImpl.Save(Object obj) +140
NHibernate.Impl.SessionImpl.SaveOrUpdate(Object obj) +288
HibernateBaseDAO`1.Insert(T entity) in C:\Documents and Settings
\cesar.IRICOM\Mis documentos\Visual Studio 2005\WebSites\geslimes
\App_Code\persistence\hibernate\HibernateBaseDAO.vb:44
InsertFamilyCommand.Execute() in C:\Documents and Settings
\cesar.IRICOM\Mis documentos\Visual Studio 2005\WebSites\geslimes
\App_Code\commands\familyCommand\InsertFamilyCommand.vb:27
FamilyService.InsertFamily(Family family) in C:\Documents and
Settings\cesar.IRICOM\Mis documentos\Visual Studio 2005\WebSites
\geslimes\App_Code\service\FamilyService.vb:22
admin_privateView_familyManagement_ListFamilies.BtnInsertFamily_Click(Object
sender, EventArgs e) in C:\Documents and Settings\cesar.IRICOM\Mis
documentos\Visual Studio 2005\WebSites\geslimes\admin\privateView
\familyManagement\ListFamilies.aspx.vb:54
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +75
System.Web.UI.WebControls.Button.RaisePostBackEvent(String
eventArgument) +97
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String
eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
+33
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+4921
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección:
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---