我该如何映射?

时间:2010-01-08 16:23:25

标签: nhibernate

我确信我是傻瓜(我银行的一些傲慢的职员刚向我解释)但是我不知道如何映射这个:

假设我有一个带有ID列的表tbl_products 和一个带有ID列的tbl_language 和我的问题:一个tbl_product_texts没有自己的id但是有一个product_id和一个language_id(还有很多几种语言的文本)

我是否必须在我的表中添加一个ID列(这很难看)或者nhibernate能够以某种方式私下跟踪它,这种数据模型在概念上是错误的还是什么?

2 个答案:

答案 0 :(得分:0)

如果您尝试我认为您尝试的那样,那么您在tbl_Products和tbl_language之间设置多对多映射。在映射中,让nHibernate知道哪个表用作链接,nHibernate足够聪明地完成它。

https://www.hibernate.org/hib_docs/nhibernate/html/collections.html

所以在Products映射中(假设你想要一组语言):

<bag name="nameOfLanguageCollection" table="tbl_product_texts">
  <key column="productID" /> <-- Name of ProductID col in tbl_product_texts
  <many-to-many class="LanguageClass" column="language_id" />  <-- name of languageid in   tbl_product_texts 
</bag>

认为是对的。现在不能检查。

答案 1 :(得分:0)

Product与ProductText具有一对多的关系,因此您可以将Text建模为Products类的集合。你tbl_products_text应该有一个主键。您没有说明您正在使用的数据库,但我的方法是在product_id,language_id上​​使用代理主键(标识符)和唯一约束。如果您没有在应用程序中管理文本,则无需采取该步骤即可使NHibernate正常工作。

您的Product类的第一遍看起来像:

public class Product
{
    public IList<ProductText> ProductTexts { get; set; }
    public string GetTextForLanguage(int languageId) { ... }
}