寻找有关如何配置NHibernate以支持我的场景的答案,这是一个具有客观化关系的多对多地图。
我收集了与其他人有关系的人:s。每个关系都有一个属性,指定它们具有哪种关系。在RDB中,这是通过使用具有该表中指定的关系类型的多对多表来完成的,然后可以通过允许更多类型来扩展模型,例如, “亲密朋友”和“敌人”。
我希望能够查询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
/延
答案 0 :(得分:1)
你说的第一个例子听起来像你需要调查一个继承映射,但我不确定这对于所涉及的额外表是如何工作的。
第二个例子你应该能够使用Where子句。
HasManyToMany(x => x.Friends)
.WithTableName("Person_Person")
.Where("type = 2");