nHibernate & SQLite = [Класс] не отображается - PullRequest
0 голосов
/ 21 декабря 2010

Ну, я боролся с этим немного сейчас, и я не могу найти решение для чего-то, что должно быть действительно простым.Я получил класс (действительно простой класс), я получил hbm.xml (SET AS EMBEDDED RESOURCE), я получил файл конфигурации, установленный для SQLite, но я все еще получаю [Класс] не отображается.

Вот гдеошибка возникает, когда я запускаю это:

 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

Код внутри моего Центра класса

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

Вот это код для 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>

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>

1 Ответ

1 голос
/ 21 декабря 2010

Согласно вашему файлу сопоставления, класс Center существует в сборке KC. В соответствии с вашей конфигурацией, сборка называется KC.Domain. Проверьте имя сборки, содержащей ваш класс Center. Ваш класс отображения, вероятно, должен сказать:

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

Возможно, вы также захотите использовать в файле hbm.xml следующее ...

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

Обратите внимание на объявления пространства имен и сборки. Я считаю, что наличие их наверху очищает мои файлы hbm.xml. Тогда вы можете использовать относительные имена повсюду.

...