FluentNHibernate如何知道要访问哪一行?

时间:2012-09-25 06:52:20

标签: nhibernate fluent-nhibernate

没有问题;我很好奇FluentNHibernate / NHibernate如何知道要访问哪些行。

在下面的伪代码中,我有这些实体:

public class User
{
    public virtual int Id { get; protected set; }
    public virtual IList<Friend> Friends { get; set; }
}   

public class Friend
{
    public virtual int Id { get; protected set; }
    public virtual User User { get; set; }
    public virtual String FunnyProperty { get; set; }
}

与这种一对多的关系:

public class UserMap : ClassMap<User>
{
    Id(x => x.Id);
    // One user has many friends
    HasMany(x => x.Friends).KeyColumn("UserId")...
}    

public class FriendMap : ClassMap<Friend>
{
    Id(x => x.Id);
    References(x => x.User, "UserId")... 
}

如果我运行以下代码来建立双向关系:

var user = new User().Friends.AddRange( /* 5 friends */ );
/* 5 friends */.ForEach(friend => friend.User = user);

然后设置:

user[2].FunnyProperty = "a magic string";

然后,在可视化数据库资源管理器工具中,我将表用户视为:


Id 
--------------------------------------
63
--------------------------------------

和表格朋友


Id | UserId | FunnyProperty
--------------------------------------
24 |   63   |    (null)
--------------------------------------
25 |   63   |    (null)
--------------------------------------
26 |   63   | a magic string
--------------------------------------
27 |   63   |    (null)
--------------------------------------
28 |   63   |    (null)
--------------------------------------

FluentNHibernate / NHibernate如何“记住” id 26 作为Friend中的第3个user.Friends对象?假设您提交事务,在其他地方开始另一个事务,并检索相同的user.Friends[2]。 FluentNHibernate / NHibernate如何通过 id 26 访问该行?

特别是当你有一个好友表,其中有许多不同的用户浮动时,如下所示,FluentNHibernate / NHibernate如何“记住”要访问哪一行?:< / p>


Id | UserId | FunnyProperty
--------------------------------------
24 |   24   |    (null)
--------------------------------------
25 |   89   |    (null)
--------------------------------------
26 |   66   | a magic string
--------------------------------------
27 |   12   |    (null)
--------------------------------------
28 |   66   |    (null)
--------------------------------------
28 |   89   |    (null)
--------------------------------------

2 个答案:

答案 0 :(得分:1)

您的好友表包含属性UserId,它是对好友的引用。流畅的NHibernate会为您定义已定义的映射。

答案 1 :(得分:1)

Friends表中还有一个索引列。