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配置)吗?

NHibernate两列同时作为复合键和外键

如果您的ProductCategory实体中有实际的ProductCategory实体,那么您的映射应该看起来像这样(这里的关键是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表示外键关系。