2014-03-12 215 views
0

我是NHibernate中的新手,需要幫助。我有兩個類:NHibernate映射類

class Pop3 
{ 
    public virtual long Id { set; get; } 
    public virtual string HostName { set; get; } 
    public virtual int Port { set; get; } 
    public virtual bool UseSsl { set; get; } 
} 

class Email 
{ 
    public virtual long Id { set; get; } 
    public virtual string UserName { set; get; } 
    public virtual string Password { set; get; } 
    public virtual Pop3 Host { set; get; } 
} 

我需要將它們映射到NHibernate(使用Sqlite)。 這是很容易使用POP3的類

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="TestAsm" 
        namespace="TestAsm.Entity.Mail"> 

    <class name="Pop3" table="pop3hosts"> 
    <id name="Id"> 
     <generator class="identity" /> 
    </id> 
    <property name="HostName" /> 
    <property name="Port" /> 
    <property name="UseSsl" /> 
    </class> 

</hibernate-mapping> 

但我怎麼能映射電子郵件類包含的POP3類財產? 我是我需要在主機屬性中設置Pop3.Id?但我認爲這是錯誤的方式。

回答

1

這種映射屬於最基本的,典型的和有據可查的,我會說

一個例子,其中Pop3類在列Pop3Id映射與many-to-one

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="TestAsm" 
        namespace="TestAsm.Entity.Mail"> 

    <class name="Email" table="email_table"> 
    <id name="Id" generator="identity" /> 

    <property name="UserName" /> 
    <property name="Password" /> 

    <many-to-one name="Host" column="Pop3Id" class="Pop3 " /> 

    </class> 

</hibernate-mapping> 

請檢查Chapter 21. Example: Parent/Child

+0

我是否需要在類屬性中設置命名空間,如果類在不同的名稱空間中,比如'class =「TestAsm.Net.Pop3」'? – user2598575

+0

好極了,如果有幫助;)類元素上的'namespace'屬性是一個縮寫,所以如果所有被引用的實體(多對一)都在同一個ns中...不需要再聲明它。但如果類不同,我們必須提供名稱空間的名稱。享受NHibernate –

+0

再次感謝!我看到NHibernate是真正的好工具:) – user2598575