我用一堆列定义了我的实体并创建了映射。
public class PurchaseRecord {
public virtual int? Id {
get;
set;
}
public virtual DateTime? PurchasedDate {
get;
set;
}
public virtual string Comment {
get;
set;
}
public virtual IList<PurchaseRecordExtendedProperty> ExtendedPropertyValues {
get;
set;
}
public class PurchaseRecordMap : ClassMap<PurchaseRecord> {
public PurchaseRecordMap() {
Table("PurchaseRecords");
Id(x => x.Id, "RecordID").GeneratedBy.Identity();
Map(x => x.PurchasedDate, "PurchaseDate").Not.Nullable();
Map(x => x.Comment, "Comment");
HasMany(x => x.ExtendedPropertyValues).KeyColumn("ExtendedPropertyID").Cascade.All();
}
在大多数情况下效果很好,在某些特定情况下我想跳过更新某些列(例如子集合ExtendedPropertyValues
)。当我创建PurchaseRecord
对象时,我甚至懒得加载ExtendedPropertyValues
的数据。但是如果属性为null,NHibernate会尝试从数据库中删除子记录。
我知道有些情况ExtendedPropertyValues
永远不会改变。出于性能考虑,我不想加载我不需要的数据,如果我不需要更新,有没有办法可以强制NH跳过指定的属性?
感谢您的任何建议。
答案 0 :(得分:0)
如果启用延迟加载,NHibernate将不会尝试加载任何子集合,它们将被初始化为代理,只有在您访问它们时才会加载它们。如果将子集合设置为null,则有效地告诉NHibernate删除该关系中的所有条目(除非您将关系标记为反向)。
NHibernate不会尝试更新子集合,除非它们发生更改(将其设置为null)。
总之,启用延迟加载,并将ExtendedPropertyValues标记为反向,除非您更改ExtendedPropertyValues,否则不应更新它,除非您访问它,否则它也不会加载ExtendedPropertyValues。