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

时间:2011-11-03 14:44:15

标签: c# nhibernate fluent-nhibernate

首先,我在网上和这里进行了彻底的搜索,但没有找到明确的解决方案。如果我的搜索不够准确并且已经发布了这个答案,我很抱歉。

问题:我有一张桌子。此表必须在两个字段上具有主键,并且其他字段包含一些数据。作为主键的两个字段也必须是外键,每个字段位于不同的表上。像(伪代码):

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配置)来映射它?

1 个答案:

答案 0 :(得分:5)

如果您的Product实体中有实际CategoryProductCategory个实体,那么您的映射应该如下所示(此处的关键是KeyReference而非{{1} }):

KeyProperty

如果你的CompositeId() .KeyReference(x => x.Product, "ProductId") .KeyReference(x => x.Category, "CategoryId"); Map(x => x.SomeOtherField1); 中只有你的ID,它会看起来像这样:

ProductCategory

第一个代码示例中的CompositeId() .KeyProperty(x => x.ProductId, "ProductId") .KeyProperty(x => x.CategoryId, "CategoryId"); Map(x => x.SomeOtherField1); 表示外键关系。