2012-02-20 95 views
2

我有一個關於如何映射外鍵ID與NHibernate映射文件的問題。例如。我有以下類:如何在NHibernate中映射外鍵標識列(屬性)?

class Topic { 
    public long ID {get; set;} 
    public string Name {get; set;} 
} 

class Post { 
    public long ID {get; set;} 
    public string Title {get; set;} 
    public string Content {get; set;} 
    public long TopicID {get; set;} // This is the FK refers to the Topic entity 
} 

郵政實體不直接引用的話題,它只能由TopicID作爲節目引用上面的主題。但似乎NHibernate <many-to-one>映射將只映射主題作爲郵政實體,但我想要的是TopicID FK,而不是主題實體。有人能幫我解決嗎?

非常感謝!

回答

0

您可以將TopicID聲明爲屬性,而不是many-to-one

<property name="TopicID" column="TopicID" type="Int64" /> 
+1

但是,如何創建此TopicID屬性和主題ID之間的約束? – daxnet 2012-02-20 02:29:23

+0

@daxnet - 爲什麼nHibernate注意約束是很重要的?數據庫中應該有一個外鍵約束,所以你的應用程序對於損壞的數據仍然是安全的。 – 2012-02-20 03:15:18

+0

好的,我現在知道你的觀點,謝謝你的幫助! – daxnet 2012-02-20 04:22:48

1

如果你只是想在安置自己的映射包含TopicID字段的值的屬性,那麼就映射它作爲一個簡單的屬性:

<property name="TopicID" column="TopicID" type="long" /> 

如果你想它映射爲對象,然後使用多對一的映射:

<many-to-one name="Topic" column="TopicID" class="Topic" /> 
+0

是的,我也意識到這一點,但如果我使用property而不是'',數據庫表如何被外鍵約束?我的意思是如何使NH Schema Tools在使用此屬性方法時創建FK約束? - 謝謝! – daxnet 2012-02-20 02:14:08

+0

在我看來,您應該能夠首先使用映射創建映射文件,並使用它創建帶有外鍵引用的數據庫模式。創建數據庫模式後,只需將映射更改爲具有簡單屬性即可,如果這是您的域模型中的要求。 – 2012-02-20 18:03:44