c# - 流畅的 nHibernate - 不是延迟加载

标签 c# nhibernate fluent-nhibernate mapping lazy-loading

这可能有些愚蠢,但我可以理解它。我有三张表

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;

投票 属性设置正确。 PostUser 引用属于 CaSTLe.Proxies.PostProxyCaSTLe.Proxies.UserProxy 类型,它们的属性是空的。 (post_iduser_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/

相关文章:

nhibernate - 通过SQLite对.Net 4.0 NHibernate运行NUnit无法加载SQLite DLL

postgresql - 使用 Fluent NHibernate 在 PostgreSQL 中自动创建模式

c# - 数据注释 vs Fluent API?支持各种 ORM 的最佳实践

c# - 将 LastIndexOf 和 Substring 与数组一起使用

c# - 由于抽象方法,NHibernate 创建代理实例失败

c# - NHibernate 事件监听器的依赖注入(inject)

c# - Firefox 中的 WebSocket

c# - Debug.Assert/Retry,32 位和 64 位的不同行为

c# - 休眠 : saving and retrieving a file to/from database

c# - 在流畅的 nHibernate 中将平面 View 映射到类层次结构