1

寻找有关如何配置 NHibernate 以支持我的场景的答案,即具有对象化关系的多对多映射。

我有一组 Person:s 与其他 Person:s 的关系。每个关系都有一个属性,指定它们具有什么类型的关系。在 RDB 中,这是通过使用具有在该表中指定的关系类型的多对多表来完成的,然后可以通过允许更多类型来扩展模型,例如“亲密朋友”和“主要敌人”。

我希望能够查询一个 Person 对象以按类型返回所有​​相关的 Person

<IList>Person myEnemies =  myPerson.getRelatedPersons(relationType.Enemy)

或者

<IList>Person myFriends = myPerson.getRelatedPersons(relationType.Friend)

另一个(不太可扩展的)解决方案是在类中静态指定存在哪些其他关系:

public class Person   
{   
  public virtual int Id { get; private set; }   
  public virtual string FirstName { get; set; }   
  public virtual string LastName { get; set; }   
  public virtual IList<Person> Friends { get; set; }   
  public virtual IList<Person> Enemies { get; set; }   
}

现在我必须使用带有“Person”表和“PersonPerson”表的遗留数据库。“PersonPerson”表将关系类型保存为整数。

我试图使用如下语法来做到这一点,但到目前为止没有成功......

// How to specify type=1  here?
HasManyToMany(x => x.Friends).WithTableName("Person_Person"); 

// How to specify type=2  here?
HasManyToMany(x => x.Enemies).WithTableName("Person_Person"); 

关于使用(流利的)NHibernate 映射这个的任何提示/解决方案?

BR

/詹斯

4

1 回答 1

1

您所说的第一个示例听起来像是您需要研究继承映射,但我不确定这将如何与所涉及的额外表一起使用。

第二个示例您应该能够使用 Where 子句。

HasManyToMany(x => x.Friends)
  .WithTableName("Person_Person")
  .Where("type = 2");
于 2009-03-11T09:05:05.097 回答