2

マッピングで遅延読み込みに設定されたバイナリ列を持つエンティティがあります。ただし、場合によっては、エンティティとバイナリデータを同時に取得する必要があります。Linq.Fetch(x => x.BinaryData)を使用しようとしましたが、無効な結合例外が発生します。そもそも参加すべきではないことを考えると、理解できます。これを機能させる方法はありますか?NHibernate3.1を使用しています

これはマッピングです:

Map(x => x.BinaryData)
   .CustomSqlType("image")
   .Length(int.MaxValue)
   .Not.Nullable()
   .LazyLoad();  // Wanna make sure we don't kill the app by loading the image data when we don't need it.

これはフェッチです:

Linq.Where(x => x.Id == id).Fetch(x => x.BinaryData).FirstOrDefault();
4

2 に答える 2

2

fetch all propertiesHQLでは、レイジープロパティを積極的に読み込むために使用できます。ただし、NH3.1では、Linqクエリにはまだ実装されていません。私が知っているように、このバグはNHibernate Jiraにあるので、解決されたかどうかを確認するか、自分で修正することができます。私たちの会社のプロトタイプでは、このバグを修正しましたが、非常に力ずくで修正したため、NHibernateプロジェクトにパッチを送信しませんでした

于 2012-05-16T14:20:08.483 に答える
2

これは現時点では不可能のようです:https ://nhibernate.jira.com/browse/NH-2888

したがって、HQLを使用する必要があります:

var post = session.CreateQuery("from Post fetch all properties")
    .SetMaxResults(1)
    .UniqueResult<Post>();

ソース:http ://ayende.com/blog/4377/nhibernate-new-feature-lazy-properties

于 2012-05-16T14:20:31.877 に答える