Критерии выбора NHibernate - PullRequest
       4

Критерии выбора NHibernate

1 голос
/ 19 октября 2010

У меня есть тип Type1 со свойством Type2s, состоящим из List<Type2>. Я настроил отображение NHibernate для свойства следующим образом:

[Map(0, Table = "Type2s", Schema = "MySchema", Cascade = CascadeStyle.All, Lazy = true, Inverse = true)]
[Key(1, Column = "Type1Id")]
[OneToMany(2, Class = "Type2, MyNamespace")]

Какая разница в поведении между этими двумя критериями для поиска экземпляров типа 1:

var criteria1 = DetachedCriteria.For<MyType1>();

var criteria2 = DetachedCriteria.For<MyType1>().SetFetchMode("Type2s", FetchMode.Join);

Когда я вызываю .List для исполняемых критериев из этих критериев, предположительно SQL для извлечения Type2, связанных с каждым экземпляром Type1, не запускается, пока я не попытаюсь получить доступ к свойству, поскольку свойство помечено как Lazy. Это правильное предположение?

Если я хочу форсировать оценку свойства Lazy, как этого лучше всего достичь?

1 Ответ

1 голос
/ 20 октября 2010

Я не очень знаком с привязкой атрибутов против hbm / fluent, но я думаю, что вы решили свою собственную проблему!

Вы правы, полагая, что данные для Type2 не будут загружены до запроса из-за ленивости сумки. Fetchmode вашего второго критерия заставляет эти объекты увлажняться одновременно, т.е. в одну базу данных туда и обратно.

Кроме того, FetchMode.Join эквивалентен FetchMode.Eager (что, на мой взгляд, лучше назвать re: laziness).

статья, объясняющая это немного подробнее: http://davidhayden.com/blog/dave/archive/2008/12/06/ImprovingNHibernatePerformanceFetchingStrategiesFetchModeFluentNHibernate.aspx

с описанием FetchMode.Join и FetchMode.Eager: http://bchavez.bitarmory.com/archive/2008/04/04/differences-between-nhibernate-fetchmode.eager-and-fetchmode.join.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...