文档对象具有版本对象的集合,另外还有对当前版本的引用。
我的映射:
public DocumentMap()
{
Table("DocDocument");
LazyLoad();
Id(x => x.Id).GeneratedBy.HiLo("hi_lo", "NextHiLo", "10", "TableName = 'DocDocument'");
References(x => x.CurrentVersion, "CurrentVersionId");
HasMany(x => x.Versions)
.KeyColumn("DocumentId")
.Access.CamelCaseField(Prefix.Underscore)
.Inverse()
.AsSet()
.Cascade.AllDeleteOrphan();
}
public DocumentVersionMap()
{
Table("DocDocumentVersion");
LazyLoad();
Id(x => x.Id).GeneratedBy.HiLo("hi_lo", "NextHiLo", "10", "TableName = 'DocDocumentVersion'");
References(x => x.Document, "DocumentId").Not.Nullable();
}
问题是当我创建新文档,新版本然后将文档对象分配给版本对象,并将版本对象添加到文档对象中的版本集合时,它工作正常。但NH发出三个sql: 1。插入文档,2。插入版本,然后3.更新文档并设置当前版本ID 。如果两个对象都有hilo生成器,那么更新是否必要,所以NH在生成sql之前知道它是id?