Ale K.
Ale K.

Reputation: 1

nHibernate & SQLite = [Class] Is not mapped

Well i have been fighting with this for a little bit now, and i can't seem to find a solution for something it should be really simple. I got a class ( really simple class ) i got the hbm.xml ( SET AS EMBEDDED RESOURCE ) i got the config file set for SQLite but i still get the [Class] Is not mapped.

Here is where the error comes up, when i run this:

 Public Sub LoadCentersFromDatabase()
        Try
            Dim session As ISession = OpenSession()
            Dim query As IQuery = session.CreateQuery("from Center")
            Dim foundCenters As IList(Of Center) = query.List(Of Center)()
            MsgBox(foundCenters.Count)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

Code inside my Center Class

Public Class Center


#Region " Class Constructors "

    Protected Sub New()

    End Sub

    Public Sub New(ByVal centerName As String, ByVal address As String, ByVal city As String, ByVal state As String, ByVal zip As String, ByVal country As String, ByVal phone As String)
        Me.Id = 0
        Me.ExternalId = -1
        Me.CenterName = centerName
        Me.Address = address
        Me.City = city
        Me.State = state
        Me.ZIP = zip
        Me.Country = country
        Me.Phone = phone
    End Sub

    Public Sub New(ByVal id As Integer, ByVal centerName As String, ByVal address As String, ByVal city As String, ByVal state As String, ByVal zip As String, ByVal country As String, ByVal phone As String)
        Me.New(centerName, address, city, state, zip, country, phone)
        Me.Id = id
    End Sub

#End Region

#Region " Declared Auto Properties "

    Public Property Id As Integer
    Public Property ExternalId As String
    Public Property CenterName As String
    Public Property Address As String
    Public Property City As String
    Public Property State As String
    Public Property ZIP As String
    Public Property Country As String
    Public Property Phone As String

#End Region


End Class

Here it is the code for the hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="KC.Domain.Center, KC" table="Centers" lazy="true">
    <id name="Id" column="CenterId">
      <generator class="native" />
    </id>
    <property name="CenterName" unique="true" />
    <property name="ExternalId" />
    <property name="Address" />
    <property name="City" />
    <property name="State" />
    <property name="ZIP" />
    <property name="Country" />
    <property name="Phone" />
  </class>
</hibernate-mapping>

The App.Config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
  <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
</configSections>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver, NHibernate</property>
    <property name="connection.connection_string">
      Data Source=C:\Users\Public\Documents\cats.db;Version=3
    </property>
    <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
    <property name="query.substitutions">true=1;false=0</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
    <mapping assembly="KC.Domain"/>
  </session-factory>
</hibernate-configuration>
</configuration>

Upvotes: 0

Views: 1045

Answers (1)

James Kovacs
James Kovacs

Reputation: 11661

According to your mapping file, the Center class exists in the KC assembly. According to your configuration, the assembly is named KC.Domain. Verify the name of the assembly containing your Center class. Your mapping class probably needs to say:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <class name="KC.Domain.Center, KC.Domain" table="Centers" lazy="true">

You might also want to use the following in your hbm.xml file...

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
                   namespace="KC.Domain"
                   assembly="KC.Domain">
    <class name="Center" table="Centers" lazy="true">

Note the namespace and assembly declarations. I find that having them at the top cleans up my hbm.xml files. Then you can use relative names throughout.

Upvotes: 1

Related Questions