views:

26

answers:

1

Hi,

im starting whit Nhibernate and have managed to get a few examples working, but now the aplication im makin throws this exeption when Nhibernate load the configuration.

NHibernate.MappingException: An association from the table TBL_MARCADAS refers to an unmapped class: Int32
at NHibernate.Cfg.Configuration.SecondPassCompileForeignKeys(Table table, ISet done)
at NHibernate.Cfg.Configuration.SecondPassCompile()
at NHibernate.Cfg.Configuration.BuildSessionFactory()
at BusinessLayer.entidad.inicializar() in D:\vault\BusinessLayer\entidad.vb:line 40
at BusinessLayer.TblEmpleado.getEmpleado(String ci) in D:\vault\BusinessLayer\TblEmpleado.vb:line 60
at BICWEBWS.Service1.get_minutosatraso(String str_CI) in D:\vault\BICWEBWS\App_Code\BICws.asmx.vb:line 7244

here is the entitiy

Imports System.Collections.Generic
Imports System.Text
Imports NHibernate.Collection
Imports NHibernate.Mapping
Imports Iesi.Collections

<NHibernate.Mapping.Attributes.Class(Table:="TBL_MARCADAS")> _
Public Class TblMarcadas
    Inherits entidad
    Private m_codgestion As Integer
    Private m_codperiodo As Integer
    Private m_coddiamarcada As Integer
    Private m_codempleado As Integer
    Private m_codhorario As Integer
    Private m_minAtrasos As Integer
    Private m_cantMarcadas As Integer
    Private m_horaUno As [String]
    Private m_horaDos As [String]
    Private m_horaTres As [String]
    Private m_horaCuatro As [String]
    Private m_horaCinco As [String]
    Private m_horaSeis As [String]
    Private m_diaLiteral As [String]


    Public Sub New()
        'MyBase.entidad()'

    End Sub

    <NHibernate.Mapping.Attributes.CompositeId(0, class:="BusinessLayer.TblMarcadas, BusinessLayer")> _
    <NHibernate.Mapping.Attributes.KeyManyToOne(1, Name:="Codgestion", Column:="CODGESTION")> _
    <NHibernate.Mapping.Attributes.KeyManyToOne(2, Name:="Codperiodo", Column:="CODPERIODO")> _
    <NHibernate.Mapping.Attributes.KeyManyToOne(3, Name:="Coddiamarcada", Column:="CODDIAMARCADA")> _
    <NHibernate.Mapping.Attributes.KeyManyToOne(4, Name:="Codempleado", Column:="CODEMPLEADO")> _
    Public Overridable Property Codgestion() As Integer
        Get
            Return m_codgestion
        End Get
        Set(ByVal value As Integer)
            m_codgestion = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property()> _
    Public Overridable Property Codperiodo() As Integer
        Get
            Return m_codperiodo
        End Get
        Set(ByVal value As Integer)
            m_codperiodo = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property()> _
    Public Overridable Property Coddiamarcada() As Integer
        Get
            Return m_coddiamarcada
        End Get
        Set(ByVal value As Integer)
            m_coddiamarcada = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property()> _
    Public Overridable Property Codempleado() As Integer
        Get
            Return m_codempleado
        End Get
        Set(ByVal value As Integer)
            m_codempleado = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property()> _
    Public Overridable Property Codhorario() As Integer
        Get
            Return m_codhorario
        End Get
        Set(ByVal value As Integer)
            m_codhorario = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property(Column:="MIN_ATRASOS")> _
    Public Overridable Property MinAtrasos() As Integer
        Get
            Return m_minAtrasos
        End Get
        Set(ByVal value As Integer)
            m_minAtrasos = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property(Column:="CANT_MARCADAS")> _
    Public Overridable Property CantMarcadas() As Integer
        Get
            Return m_cantMarcadas
        End Get
        Set(ByVal value As Integer)
            m_cantMarcadas = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property(Column:="HORA_UNO")> _
    Public Overridable Property HoraUno() As [String]
        Get
            Return m_horaUno
        End Get
        Set(ByVal value As [String])
            m_horaUno = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property(Column:="HORA_DOS")> _
    Public Overridable Property HoraDos() As [String]
        Get
            Return m_horaDos
        End Get
        Set(ByVal value As [String])
            m_horaDos = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property(Column:="HORA_TRES")> _
    Public Overridable Property HoraTres() As [String]
        Get
            Return m_horaTres
        End Get
        Set(ByVal value As [String])
            m_horaTres = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property(Column:="HORA_CUATRO")> _
    Public Overridable Property HoraCuatro() As [String]
        Get
            Return m_horaCuatro
        End Get
        Set(ByVal value As [String])
            m_horaCuatro = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property(Column:="HORA_CINCO")> _
    Public Overridable Property HoraCinco() As [String]
        Get
            Return m_horaCinco
        End Get
        Set(ByVal value As [String])
            m_horaCinco = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property(Column:="HORA_SEIS")> _
    Public Overridable Property HoraSeis() As [String]
        Get
            Return m_horaSeis
        End Get
        Set(ByVal value As [String])
            m_horaSeis = value
        End Set
    End Property

    <NHibernate.Mapping.Attributes.Property(Column:="DIA_LITERAL")> _
    Public Overridable Property DiaLiteral() As [String]
        Get
            Return m_diaLiteral
        End Get
        Set(ByVal value As [String])
            m_diaLiteral = value
        End Set
    End Property


    Public Overrides Function Equals(ByVal obj As [Object]) As Boolean
        Return MyBase.Equals(obj)
    End Function

    Public Overrides Function GetHashCode() As Integer
        Return MyBase.GetHashCode()
    End Function

    Public Overrides Function ToString() As String
        Dim s As [String] = ""

        s += "codgestion : " & m_codgestion.ToString() & vbLf
        s += "codperiodo : " & m_codperiodo.ToString() & vbLf
        s += "coddiamarcada : " & m_coddiamarcada.ToString() & vbLf
        s += "codempleado : " & m_codempleado.ToString() & vbLf
        s += "codhorario : " & m_codhorario.ToString() & vbLf
        s += "minAtrasos : " & m_minAtrasos.ToString() & vbLf
        s += "cantMarcadas : " & m_cantMarcadas.ToString() & vbLf
        If m_horaUno IsNot Nothing Then
            s += "horaUno : " & m_horaUno.ToString() & vbLf
        Else
            s += "horaUno : null" & vbLf
        End If
        If m_horaDos IsNot Nothing Then
            s += "horaDos : " & m_horaDos.ToString() & vbLf
        Else
            s += "horaDos : null" & vbLf
        End If
        If m_horaTres IsNot Nothing Then
            s += "horaTres : " & m_horaTres.ToString() & vbLf
        Else
            s += "horaTres : null" & vbLf
        End If
        If m_horaCuatro IsNot Nothing Then
            s += "horaCuatro : " & m_horaCuatro.ToString() & vbLf
        Else
            s += "horaCuatro : null" & vbLf
        End If
        If m_horaCinco IsNot Nothing Then
            s += "horaCinco : " & m_horaCinco.ToString() & vbLf
        Else
            s += "horaCinco : null" & vbLf
        End If
        If m_horaSeis IsNot Nothing Then
            s += "horaSeis : " & m_horaSeis.ToString() & vbLf
        Else
            s += "horaSeis : null" & vbLf
        End If
        If m_diaLiteral IsNot Nothing Then
            s += "diaLiteral : " & m_diaLiteral.ToString() & vbLf
        Else
            s += "diaLiteral : null" & vbLf
        End If
        Return s
    End Function

    Public Overridable Function GetTotalAtrasos(ByVal mes As Integer, ByVal periodo As Integer, ByVal CI As String) As Integer
        ' That's how the Session decide to save or to update; set NHMA.Id(UnsavedValue=x) to replace 0
        Dim session As NHibernate.ISession
        Try
            session = _sessionFactory.OpenSession()

            Dim sd As System.Collections.IList = session.Find("from TBL_MARCADAS")
            Dim total As Integer
            For Each marcada As TblMarcadas In sd
                total += marcada.MinAtrasos
            Next
            Return total
        Catch ex As Exception

        Finally
            If (session IsNot Nothing) Then
                session.Close()
            End If
        End Try
    End Function


End Class

and here is the table Script

CREATE TABLE [dbo].[TBL_MARCADAS](
 [CODGESTION] [int] NOT NULL,
 [CODPERIODO] [int] NOT NULL,
 [CODDIAMARCADA] [int] NOT NULL,
 [CODEMPLEADO] [int] NOT NULL,
 [CODHORARIO] [int] NULL,
 [MIN_ATRASOS] [int] NULL,
 [CANT_MARCADAS] [int] NULL,
 [HORA_UNO] [char](10) NULL,
 [HORA_DOS] [char](10) NULL,
 [HORA_TRES] [char](10) NULL,
 [HORA_CUATRO] [char](10) NULL,
 [HORA_CINCO] [char](10) NULL,
 [HORA_SEIS] [char](10) NULL,
 [DIA_LITERAL] [char](10) NULL,
PRIMARY KEY CLUSTERED 
(
 [CODGESTION] ASC,
 [CODPERIODO] ASC,
 [CODDIAMARCADA] ASC,
 [CODEMPLEADO] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

this is what the NHibernate.mappings serializer throws:

<?xml version="1.0" encoding="utf-8"?>
<!--Generated from NHibernate.Mapping.Attributes on 2010-06-24 08:27:58Z.-->
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
  <class name="BusinessLayer.TblEmpleado, BusinessLayer" table="TBL_EMPLEADO">
    <id name="codempleado">
      <generator class="native" />
    </id>
    <property name="Nombre" />
    <property name="ApellidoP" column="APELLIDO_P" />
    <property name="ApellidoM" column="APELLIDO_M" />
    <property name="FechaIngreso" column="FECHA_INGRESO" />
    <property name="Cargo" />
    <property name="SueldoActual" column="SUELDO_ACTUAL" />
    <property name="Foto" />
    <property name="Estadoempleado" />
    <property name="Codregional" />
    <property name="Codseguro" />
    <property name="Codhorario" />
    <property name="FechaNac" column="FECHA_NAC" />
    <property name="Sexo" />
    <property name="Ci" />
    <property name="Expedido" />
    <property name="Nacionalidad" />
    <property name="TipoTrabajador" column="TIPO_TRABAJADOR" />
  </class>
  <class name="BusinessLayer.TblMarcadas, BusinessLayer" table="TBL_MARCADAS">
    <composite-id class="TblMarcadas">
      <key-many-to-one name="Codgestion" column="CODGESTION" />
      <key-many-to-one name="Codperiodo" column="CODPERIODO" />
      <key-many-to-one name="Coddiamarcada" column="CODDIAMARCADA" />
      <key-many-to-one name="Codempleado" column="CODEMPLEADO" />
    </composite-id>
    <property name="Codperiodo" />
    <property name="Coddiamarcada" />
    <property name="Codempleado" />
    <property name="Codhorario" />
    <property name="MinAtrasos" column="MIN_ATRASOS" />
    <property name="CantMarcadas" column="CANT_MARCADAS" />
    <property name="HoraUno" column="HORA_UNO" />
    <property name="HoraDos" column="HORA_DOS" />
    <property name="HoraTres" column="HORA_TRES" />
    <property name="HoraCuatro" column="HORA_CUATRO" />
    <property name="HoraCinco" column="HORA_CINCO" />
    <property name="HoraSeis" column="HORA_SEIS" />
    <property name="DiaLiteral" column="DIA_LITERAL" />
  </class>
</hibernate-mapping>

thanks very much for your time

A: 

Well, i found the problem.

i dont know why the acutomatic generation tool used key-many-to-one:

<composite-id class="TblMarcadas">
      <key-many-to-one name="Codgestion" column="CODGESTION" />
      <key-many-to-one name="Codperiodo" column="CODPERIODO" />
      <key-many-to-one name="Coddiamarcada" column="CODDIAMARCADA" />
      <key-many-to-one name="Codempleado" column="CODEMPLEADO" />
    </composite-id>

i just changed it for key-property.

maybe it was because of a foreign key whit this table?

any way hope this helps some one bye

hviniciusg