我确信我是傻瓜(我银行的一些傲慢的职员刚向我解释)但是我不知道如何映射这个:
假设我有一个带有ID列的表tbl_products 和一个带有ID列的tbl_language 和我的问题:一个tbl_product_texts没有自己的id但是有一个product_id和一个language_id(还有很多几种语言的文本)
我是否必须在我的表中添加一个ID列(这很难看)或者nhibernate能够以某种方式私下跟踪它,这种数据模型在概念上是错误的还是什么?
答案 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) { ... }
}