没有问题;我很好奇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) --------------------------------------
答案 0 :(得分:1)
您的好友表包含属性UserId,它是对好友的引用。流畅的NHibernate会为您定义已定义的映射。
答案 1 :(得分:1)
Friends表中还有一个索引列。