我有一个类Journal,它有一个IList对象JournalLine。
我创建了一个Journal并意外地通过相同的行生成方法运行了两次。此方法的开始调用_journalLines.Clear()和结束调用_session.SaveOrUpdate(journal)。所以我有这个序列:
- 生成
Journal没有行,调用SaveOrUpdate. 没关系。 - 生成
JournalLinesID 为 1、2、3 的三个,添加到Journal._journalLines并调用SaveOrUpdate - 打电话
Journal._journalLines.Clear()。此后的断点显示行列表为空。 - 生成
JournalLinesID 为 4、5、6 的三个,添加到Journal._journalLines并调用SaveOrUpdate. 这里的断点显示其中_journalLines包含三件事。 - 我剩下一个
Journal有 6 行的。
这一切都发生在一个事务中,并且在完成之前没有任何内容保存在数据库中。
为什么要合并这两个集合?在我看来,它应该到达SaveOrUpdate断点显示它有三行的最后一个位置,并坚持它有三行。其他三个是否因为还没有刷新而在内存中徘徊?
编辑:映射
public JournalMap()
{
// Other stuff
HasMany(x => x.JournalLines)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.AllDeleteOrphan();
}
public JournalLineMap()
{
// Other stuff
References(x => x.Journal);
}
Journal有这些:
private readonly IList<JournalLine> _journalLines = new List<JournalLine>();
public virtual IEnumerable<JournalLine> JournalLines
{ get { return _journalLines; } }
生成这些行的实际代码太复杂了,无法在这里添加,但是它_journalLines.Add(journalLine);在生成它们之后调用,然后调用它,T 是Journal
public T Add(T entity)
{
_session.SaveOrUpdate(entity);
return entity;
}
在最终调用之前_session.Flush()并且_session.Transaction.Commit();如果刷新没有错误。