我正在尝试映射以下内容:
用户可以连接到其他用户。用户类具有“Connections”属性,该属性是UserConnection的集合。 UserConnection有两个对User的引用,一个用于请求者(发起连接的人)和一个用于被请求者(他是连接目标的人)。< / p>
使用FluentNHibernate我想在加载用户时加载所有UserConnections。用户的连接是用户的id匹配 >
public class User
{
//....
public virtual IList<UserConnection> Connections { get; set; }
}
public class UserConnection
{
//....
public virtual User Requester { get; set; }
public virtual User Requestee { get; set; }
}
这感觉就像是多对多的关系,但我不能完全围绕它。有人可以帮忙吗?
编辑:
我当前的用户映射(下方)显然只匹配一个列...
HasMany(x => x.Connections).Inverse().Key(k => k.Columns.Add("Requestee_id")).Fetch.Select().Not.LazyLoad();
编辑2:
我考虑过this approach但我希望尽可能避免这种情况......
答案 0 :(得分:1)
不是一个多少?用户有一个Connections集合?但每个连接有1个RequesterUser或1个RequesteeUser?
这将是一个自引用关系,映射如下所示。
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("Users");
DynamicUpdate();
References<User>(x => x.Requester)
.Cascade.None()
.NotFound.Ignore();
References<User>(x => x.Requestee)
.Cascade.None()
.NotFound.Ignore();
HasMany<User>(x => x.RequesterConnections)
.Cascade.AllDeleteOrphan()
.Inverse()
.KeyColumn("RequesterId");
HasMany<User>(x => x.RequesteeConnections)
.Cascade.AllDeleteOrphan()
.Inverse()
.KeyColumn("RequesteeId");
}
}
我可能完全错了,没有使用NH长,但也许会引发一些想法。 我想这就是我会尝试做的事情。
显然你没有一个Connections集合,但你可以很容易地得到它们。
希望这会有所帮助。 钢钣