2
這可能是愚蠢的東西,但我可以讓我的頭靠近它。我有三個表流利的nHibernate - 不是懶惰加載
Post
id
content
...
User
id
name
...
Vote
user_id
post_id
votedate
我VoteMap:
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();
}
}
PostMap:
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();
}
}
中userMap
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;
投票屬性設置正確。 郵政和用戶引用型Castle.Proxies.PostProxy和Castle.Proxies.UserProxy和他們的屬性是空的。 (POST_ID和user_id說明被設置爲0)
不應該的nHibernate延遲加載該數據?
出於好奇,爲什麼你映射了私有字段(''_id「')爲Id,而不是'Id'屬性?雖然我真的不熟悉私有域映射,但我不知道它是否適合延遲加載,特別是對於標識符。你有沒有嘗試用屬性映射替換這些? – jbl
因爲我所有的實體都具有隻讀屬性(不允許實體處於無效狀態)。按照建議,我用公共虛擬屬性替換了私有屬性,但仍得到相同的結果。它只適用於當我顯然添加.Not.LazyLoad()到所有映射。 –
具有您的實體類的相關代碼將有助於理解您的問題。 – jbl