我有一个类Journal
,它有一个IList
对象JournalLine
。
我创建了一个Journal
并意外地通过相同的行生成方法运行了两次。此方法的开始调用_journalLines.Clear()
和结束调用_session.SaveOrUpdate(journal)
。所以我有这个序列:
- 生成
Journal
没有行,调用SaveOrUpdate
. 没关系。 - 生成
JournalLines
ID 为 1、2、3 的三个,添加到Journal._journalLines
并调用SaveOrUpdate
- 打电话
Journal._journalLines.Clear()
。此后的断点显示行列表为空。 - 生成
JournalLines
ID 为 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();
如果刷新没有错误。