首先,我在网上和这里进行了彻底的搜索,但没有找到明确的解决方案。如果我的搜索不够准确并且已经发布了这个答案,我很抱歉。
问题:我有一张桌子。此表必须在两个字段上具有主键,并且其他字段包含一些数据。作为主键的两个字段也必须是外键,每个字段位于不同的表上。像(伪代码):
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配置)来映射它?
答案 0 :(得分:5)
如果您的Product
实体中有实际Category
和ProductCategory
个实体,那么您的映射应该如下所示(此处的关键是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);
表示外键关系。