NHibernate跳过某些属性进行更新,可能吗?

NHibernate跳过某些属性进行更新,可能吗?,nhibernate,Nhibernate,我用一堆列定义了实体,并创建了映射 public class PurchaseRecord { public virtual int? Id { get; set; } public virtual DateTime? PurchasedDate { get; set; } public virtual string Comment { get; set;

我用一堆列定义了实体,并创建了映射

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();
    }
公共类PurchaseRecord{
公共虚拟int?Id{
得到;
设置
}
公共虚拟日期时间?PurchasedDate{
得到;
设置
}
公共虚拟字符串注释{
得到;
设置
}
公共虚拟IList扩展属性值{
得到;
设置
}
公共类PurchaseRecordMap:ClassMap{
public PurchaseRecordMap(){
表(“采购记录”);
Id(x=>x.Id,“RecordID”).GeneratedBy.Identity();
Map(x=>x.PurchasedDate,“PurchaseDate”).Not.Nullable();
地图(x=>x.Comment,“Comment”);
HasMany(x=>x.extendedPropertyValue).KeyColumn(“ExtendedPropertyID”).Cascade.All();
}
它在大多数情况下都能很好地工作,但是在某些特定情况下,我希望跳过更新某些列(例如子集合
extendedpropertyvalue
).当我创建
PurchaseRecord
对象时,我甚至懒得加载
ExtendedPropertyValues
的数据。但是如果属性为null,NHibernate会尝试从数据库中删除子记录

我知道在某些情况下,
extendedpropertyvalue
永远不会更改。出于性能考虑,我不想加载我不需要的数据,如果我不需要更新,有没有办法强制NH跳过指定的属性


感谢您的建议。

如果您启用延迟加载,NHibernate将不会尝试加载任何子集合,它们将被初始化为代理,只有在您访问它们时才会加载。如果您将子集合设置为null,这实际上是告诉NHibernate删除该关系中的所有项(除非将关系标记为反向)

NHibernate不会尝试更新子集合,除非它们发生更改(将其设置为null即可)

总之,启用延迟加载,并将ExtendedPropertyValues标记为反向,并且除非您更改ExtendedPropertyValues,否则它不应该更新它,除非您访问它,否则它也不会加载ExtendedPropertyValues。

是否尝试使用DynamicCupDate()?