あなたが特定の外部キーのための遅延ロードを削除するためにグローバルIReferenceConvention
を追加することができます。
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 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 ReferenceConvention : IReferenceConvention, IHasManyConvention{
public void Apply(IManyToOneInstance instance) {
instance.Fetch.Join();
}
public void Apply(IOneToManyCollectionInstance instance) {
instance.Fetch.Select();
}
}
、NHibernateの意志で関連レコードを結合することにより、1人の関係に多くの自動ロード同じクエリと、別のクエリで1対多のクエリを実行できます。それを使用するに
、シンプルな新しい条約を登録:
.Conventions.Add(new ReferenceConvention())
あなたがそれを使用する方法をいくつかの例を示していただけますか? –
使用方法に関する最新の回答をご覧ください。 – mdameer
まだ遅延ロードが発生します。遅延読み込みを完全に無効にしたいしたがって、関連するプロパティはnullになります。 –