2012-02-20 89 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