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

时间:2012-10-25 00:12:01

标签: nhibernate

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

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跳过指定的属性?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

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

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

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