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

C# NHibernate同时将两列作为复合键和外键,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,首先,我已经在网上和这里进行了彻底的搜索,没有找到手头任务的明确解决方案。如果我的搜索不够准确,并且这个答案已经发布,我深表歉意 问题是:我有一张桌子。此表必须在两个字段和包含某些数据的其他字段上具有主键。作为主键的两个字段也必须是外键,每个字段位于不同的表中。类似于(前面的伪代码): 现在我找不到如何使用Fluent Nhibernate配置它。虽然这个任务在EF代码上是微不足道的,但在这个项目上,我被困在NET3.5上,无法使用它,所以NHibernate是唯一的选择 我尝试使用Compos

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

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

现在我找不到如何使用Fluent Nhibernate配置它。虽然这个任务在EF代码上是微不足道的,但在这个项目上,我被困在NET3.5上,无法使用它,所以NHibernate是唯一的选择

我尝试使用CompositeId()、References()和其他东西,尝试了各种组合,但都没有成功。我不认为我得到的错误是相关的,我只需要一个这样的场景的示例工作配置


任何人都知道如何使用Fluent Nhibernate(无xml配置)映射此属性吗?

如果在
ProductCategory
实体中有实际的
Product
Category
实体,那么映射应该是这样的(这里的键是
KeyReference
而不是
KeyProperty
):

如果您的
ProductCategory
中只有ID,则其外观如下:

CompositeId()
    .KeyProperty(x => x.ProductId, "ProductId")
    .KeyProperty(x => x.CategoryId, "CategoryId");

Map(x => x.SomeOtherField1);

第一个代码示例中的
KeyReferences
表示外键关系。

确实如此。我不得不使用这些键引用并从其他两个实体中删除“HasMany”,因为它在两端创建了重复的FK。现在它真的很漂亮。谢谢。如果ProductId恰好不是产品的主键,那么除了修复糟糕的设计之外,该怎么办?
CompositeId()
    .KeyReference(x => x.Product, "ProductId")
    .KeyReference(x => x.Category, "CategoryId");

Map(x => x.SomeOtherField1);
CompositeId()
    .KeyProperty(x => x.ProductId, "ProductId")
    .KeyProperty(x => x.CategoryId, "CategoryId");

Map(x => x.SomeOtherField1);