【发布时间】:2013-11-06 17:10:21
【问题描述】:
我有一个类Journal,它有一个IList 的JournalLine 对象。
我创建了一个Journal,但不小心通过相同的行生成方法运行了两次。此方法的开头调用_journalLines.Clear(),结尾调用_session.SaveOrUpdate(journal)。所以我有这个序列:
- 生成
Journal没有线路,调用SaveOrUpdate。没关系。 - 生成三个
JournalLines,ID分别为1、2、3,添加到Journal._journalLines并调用SaveOrUpdate - 致电
Journal._journalLines.Clear()。此后的断点显示行列表为空。 - 生成三个 ID 为 4、5、6 的
JournalLines,添加到Journal._journalLines并调用SaveOrUpdate。此处的断点显示_journalLines包含三个内容。 - 我留下了一个有 6 行的
Journal。
这一切都发生在一个事务中,在完成之前没有任何内容保存在数据库中。
为什么要合并这两个集合?在我看来,它应该到达最后一个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(); 之前,如果刷新没有错误。
【问题讨论】:
-
在一个事务中多次调用 SaveOrUpdate 是否有真正的原因?
-
#1 是创建保存日志的事物的通用方法的一部分,#4 是可以独立调用的方法,另一个调用 (#2) 是错误的。跨度>
-
我猜#1 与此并不严格相关,我更想弄清楚为什么 #2 和 #4 合并而不是覆盖。
标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping