我有两个班级,WallPost
和Vote
。 WallPost与投票包含1:n的关系。这些类在NHibernate中自动化。
好了,现在我正在运行测试,我注意到我可以将它们保存到数据库中但是当我刷新会话并检索它们时,WallPost中的投票集合是空的,它不反映数据库和它应该被初始化。
这是我运行的测试,我在断言上遇到错误:
//Creating a wallpost
WallPost post = new WallPost();
post.Author = memberTwo;
post.Receiver = memberOne;
post.BodyText = "a";
//Creating the Vote
var vote = new Vote();
vote.IsUpvote = true;
vote.Member = memberOne;
//Here is where I make the connection between the two
vote.Post = post;
post.Votes.Add(vote);
//I'm saving both because I really don't know which one to save,
//kinda confused about the whole inverse thing.
provider.SaveVote(vote);
provider.SavePost(post);
//And finally evicting the vars from the ISession
FlushSessionAndEvict(vote);
FlushSessionAndEvict(post);
//Works
Assert.IsTrue(new VoteRepository().GetAll()[0] != null);
//Worls
Assert.IsTrue(new VoteRepository().GetAll()[0].Post!= null);
//FAILS ON THIS ASSERT!!!!
Assert.IsTrue(new PostRepository().GetAll()[0].Votes.Count > 0);
出于某种原因,Wallpost没有初始化投票集合。
保存只会打开一个事务,调用SaveOrUpdate然后关闭事务。
当我关闭事务时,我发现所有信息都使用正确的外键等保存在数据库中。它只是没有正确检索。
这是我的WallPost课程:
[Serializable]
public class WallPost : Post<WallPost>
{
}
[Serializable]
public abstract class Post<T> : Post, IHierarchy<T> where T: Post
{
public Post()
{
Children = new List<T>();
}
public virtual T Parent {
get;
set;
}
public virtual int Depth
{
get;
set;
}
public virtual IList<T> Children
{
get;
set;
}
}
[Serializable]
public abstract class Post : Entity
{
public Post()
{
CreateDate = DateTime.Now;
Votes = new List<Vote>();
}
public virtual string Name
{
get; set;
}
public virtual string BodyText
{
get; set;
}
public virtual Member Author
{
get; set;
}
public virtual Member Receiver
{
get;
set;
}
public virtual DateTime CreateDate
{
get; set;
}
[Cascade(Enums.CascadeOptions.SaveUpdate)]
public virtual IList<Vote> Votes
{
get;set;
}
}
这是我的投票类:
[Serializable]
public class Vote : Entity
{
public virtual Member Member
{
get; set;
}
[Cascade(Enums.CascadeOptions.None)]
public virtual WallPost Post
{
get;
set;
}
public virtual bool IsUpvote
{
get; set;
}
}
我可以根据要求添加更多代码,但似乎我可能放得太多了。
谢谢。
电子
编辑:我注意到xml地图没有在壁纸类中映射投票。我在WallPost中添加了一个ovveride: mapping.HasMany(m =&gt; m.Vote).ForeignKeyConstraintName(“WallPost_id”)。LazyLoad()。Not.Inverse(); 它的工作原理。 为什么automapper不能正确映射类?