NHibernate两列同时作为复合键和外键
本文关键字:复合 两列 NHibernate | 更新日期: 2023-09-27 18:13:09
首先,我已经在网上和这里彻底搜索了,没有找到手头任务的明确解决方案。如果我的搜索不够准确,我道歉,这个答案已经发布了。
问题是:我有一张桌子。这个表必须在两个字段和其他包含一些数据的字段上有一个主键。作为主键的两个字段也必须是外键,它们分别位于不同的表上。类似于(前面的伪代码):
Product: Id (pk)
Category: Id (pk)
ProductCategory: (ProductId (fk on product), CategoryId (fk on category))(pk), SomeOtherField1, SomeOtherField2, etc
现在我找不到如何使用Fluent Nhibernate配置这个。虽然这个任务在EF Code First上是微不足道的,但在这个项目中,我被困在。Net 3.5上,不能使用它,所以NHibernate是唯一的选择。
我尝试使用CompositeId(), References()和其他东西,尝试了各种组合,但没有工作。我不认为我得到的错误是相关的,我只需要一个示例工作配置像这样的场景。
有人知道如何使用Fluent Nhibernate映射这个(没有xml配置)吗?
如果您的ProductCategory
实体中有实际的Product
和Category
实体,那么您的映射应该看起来像这样(这里的关键是KeyReference
而不是KeyProperty
):
CompositeId()
.KeyReference(x => x.Product, "ProductId")
.KeyReference(x => x.Category, "CategoryId");
Map(x => x.SomeOtherField1);
如果你的ProductCategory
中只有id,它看起来像这样:
CompositeId()
.KeyProperty(x => x.ProductId, "ProductId")
.KeyProperty(x => x.CategoryId, "CategoryId");
Map(x => x.SomeOtherField1);
第一个代码示例中的KeyReferences
表示外键关系。