2012-04-30 11 views
0

私はのような何かを行うことができます知っている:Can Castle ActiveRecordは選択的に怠け者でしょうか?

[BelongsTo("Foo", NotNull = true, Lazy = FetchWhen.Immediate)] 
public Foo MyProperty 
{ 

} 

そして、このフィールドはかなり ゲッターがアクセスされたときよりも、参加して、すぐに取り込まれます。

私は、クエリを実行したときしかし、それがフェッチするかどうかを指定することが可能であるが、そのようなここのように、すぐに が行われます。

MyModel[] foo = MyModel.FindAllByProperty("User", someUser); 
//Sometimes I want lazy, sometimes I don't.. 

.NET Entity Frameworkのは以下のような、Includeを使用してこれを行うことができます。

var foos = from f in context.FOO.Include("Bar") where f.id == 123 select f; 

そして、私はRailsが:include構文を使ってこの同じ機能を持っていると信じています。 城ActiveRecordに相当するものがあるのか​​、怠惰が常にモデルレベルで定義されているのか不思議です。ありがとう!!

答えて

1

はい、できます。お勧めの方法は、デフォルトで遅延マッピングを使用して、それぞれのケースで必要なものを熱心に取得することです。

クエリごとのeagerフェッチの定義は、クエリAPIによって異なります。たとえば、HQLは「join fetch」というキーワードを使用し、使用する基準APIはSetFetchModeなどです。

+0

優秀!私はこれらの両方を調べます。私はたくさんのHQLを使いますが、たいていは 'Blog.FindAll()'のようなことをします。 –

関連する問題