2010-12-21 137 views
0

嗯,我一直在爭取這一點,現在我似乎無法找到一個應該很簡單的解決方案。我得到了一個類(非常簡單的類),我得到了hbm.xml(SET AS EMBEDDED RESOURCE)。我爲SQLite設置了配置文件,但仍然得到[Class]未映射。nHibernate和SQLite = [Class]沒有映射

這裏就是錯誤出現,當我運行此:我中心類中

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 

這是你hml.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

根據您的映射文件,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文件。那麼你可以使用相對的名字。

+0

嘿詹姆斯,謝謝你的回答,但那也行不通。我在開始的時候就是這樣,我開始改變它,但是它也沒有做到:( – 2010-12-22 05:16:21