Как вручную создать прокси для сбора деталей в NHibernate - PullRequest
0 голосов
/ 11 августа 2011

У меня есть класс, пусть это будет Foo:

public class Foo
{ 
  ...

  protected MyCollection<Detail> _details
  public virtual MyCollection<Detail> Details 
  {
     get { return _details ?? new MyCollection<Details>(); }
     set { _details = value; ... } 
  }
  ...
}

public class Detail {...}

Когда я делаю запрос LINQ:

var q = session.Query<Foo>().Select(foo => new Foo( property1 = foo.property1, ... );
...
q.ToList();

У меня NULL вПоле _details и , когда я получаю доступ к Подробности , чтобы получить все Ленивые детали, конечно, я получаю new MyCollection () , но неIPersistentBag (или еще, IPersistentCollection).

Итак, как я могу вручную создать коллекцию прокси (у меня есть ссылки на session / sessionFactory)?

[добавлено] здесь есть сопоставления (на Foo):

<bag name="Details" lazy="true" collection-type="NHibernateDataService.DetailBag`1[[DataObjects.Detail, DataObjects]], NHibernateDataService" cascade="all-delete-orphan" fetch="select" batch-size="1" access="property" inverse="true">
  <key column="`Master`" />
  <one-to-many class="DataObjects.Detail" />
</bag>

Спасибо!

1 Ответ

0 голосов
/ 11 августа 2011

MyCollection не может быть сопоставлено с IPersistentBag, если, конечно, вы не внедрили этот интерфейс в MyCollection (и, возможно, не указали тип сопоставления явно ??) ...

Более стандартный подход состоит в том, чтобы установить для свойства «collection-type» в отображении пакета собственный тип - реализацию IUserCollectionType, из которой вы можете выбрать базовый класс, из которого происходит MyCollection.

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