这可能有些愚蠢,但我可以理解它。我有三张表
Post
id
content
...
User
id
name
...
Vote
user_id
post_id
votedate
我的投票 map :
public class VoteMap : ClassMap<Vote>
{
public VoteMap()
{
DynamicUpdate();
Table("vote");
Id(Reveal.Member<Vote>("_id")).Column("id");
Map(Reveal.Member<Vote>("_votedate")).Column("vote_date");
References(x => x.Post).Column("post_id").LazyLoad().Not.Nullable();
References(x => x.User).Column("user_id").LazyLoad().Not.Nullable();
}
}
邮政 map :
public class PostMap : ClassMap<Post>
{
public PostMap()
{
DynamicUpdate();
Table("post");
Id(Reveal.Member<Post>("_id")).Column("id");
Map(Reveal.Member<Post>("_content")).Column("content");
References(x => x.User).Column("user_id").Not.Nullable().LazyLoad();
}
}
用户 map
public class UserMap : ClassMap<User>
{
public UserMap()
{
DynamicUpdate();
Table("user");
Id(Reveal.Member<User>("_id")).Column("id");
Map(Reveal.Member<User>("_name")).Column("name");
HasMany(x => x.Posts).KeyColumn("user_id").LazyLoad();
HasMany(x => x.Votes).KeyColumn("user_id").LazyLoad();
}
}
当我检索投票时:
var myvote = _votesRepository.GetVote(postid, userid);
int post_id = myvote.Post.Id;
int user_id = myvote.User.Id;
投票 属性设置正确。 Post 和 User 引用属于 CaSTLe.Proxies.PostProxy 和 CaSTLe.Proxies.UserProxy 类型,它们的属性是空的。 (post_id 和 user_id 设置为 0)
nHibernate 不应该延迟加载这些数据吗?
最佳答案
你是对的 jbl,它根本不喜欢私有(private) id 字段。此更改解决了问题:
protected int _id;
public virtual int Id { get {return _id;} }
并从此更改所有类的映射:
Id(Reveal.Member<Vote>("_id")).Column("id");
为此:
Id(x => x.Id).Column("id");
关于c# - 流畅的 nHibernate - 不是延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20205241/