您可以添加全球IReferenceConvention
刪除延遲加載特定的外鍵:
public class AggregateAttribute : Attribute {
}
public class ReferenceConvention : IReferenceConvention, IReferenceConventionAcceptance, IHasManyConvention, IHasManyConventionAcceptance {
public void Apply(IManyToOneInstance instance) {
instance.Fetch.Join();
}
public void Accept(IAcceptanceCriteria<IManyToOneInspector> criteria) {
criteria.Expect(x => x.Property != null && x.Property.MemberInfo.GetCustomAttributes(typeof(AggregateAttribute), false).Any());
}
public void Apply(IOneToManyCollectionInstance instance) {
instance.Fetch.Select();
}
public void Accept(IAcceptanceCriteria<IOneToManyCollectionInspector> criteria) {
criteria.Expect(x => x.Member != null && x.Member.IsDefined(typeof(AggregateAttribute), false));
}
}
使用綜合屬性爲:
public class FirstRecord {
public int Id { get; set; }
public int Name { get; set; }
// Disable lazy load
[Aggregate]
public SecondRecord SecondRecord { get; set; }
// Lazy load
public ThirdRecord ThirdRecord { get; set; }
}
public class SecondRecord {
public int Id { get; set; }
public int Name { get; set; }
}
public class ThirdRecord {
public int Id { get; set; }
public int Name { get; set; }
}
此代碼將刪除任何屬性爲的延遲加載屬性就可以了,如果你想關閉延遲所有屬性,然後刪除該屬性和更新約定類是:
public class ReferenceConvention : IReferenceConvention, IHasManyConvention{
public void Apply(IManyToOneInstance instance) {
instance.Fetch.Join();
}
public void Apply(IOneToManyCollectionInstance instance) {
instance.Fetch.Select();
}
}
有了這個代碼,NHibernate的會自動加載許多人通過參加相關記錄一個關係相同的查詢,以及單獨查詢的一對多查詢。
要使用它,簡單註冊新的約定:
.Conventions.Add(new ReferenceConvention())
可否請你展示一些例子如何使用? –
請參閱有關如何使用它的更新回答。 – mdameer
仍會發生延遲加載。我想完全禁用延遲加載。所以,我的關聯屬性將爲null。 –