使用fluentnhibernate映射两列中的一列/多对多映射

时间:2011-04-01 15:31:57

标签: join fluent-nhibernate many-to-many

我正在尝试映射以下内容:

用户可以连接到其他用户。用户类具有“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但我希望尽可能避免这种情况......

1 个答案:

答案 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集合,但你可以很容易地得到它们。

希望这会有所帮助。 钢钣