如何在NHibernate中为Detail Collection手动创建Proxy

时间:2011-08-11 12:25:20

标签: linq nhibernate collections proxy

我上课了,让它成为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();

我在_details字段中有 NULL ,当我访问详细信息获取所有 Lazy 细节,当然我得到 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 :(得分:0)

MyCollection无法映射到IPersistentBag,当然,除非您在MyCollection上实现该接口(并且可能显式设置映射类型?)...

更标准的方法是将bag上的“collection-type”属性设置为自定义类型 - IUserCollectionType的实现,您可以选择创建MyCollection派生自的基类。