我上课了,让它成为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>
谢谢!
答案 0 :(得分:0)
MyCollection无法映射到IPersistentBag,当然,除非您在MyCollection上实现该接口(并且可能显式设置映射类型?)...
更标准的方法是将bag上的“collection-type”属性设置为自定义类型 - IUserCollectionType的实现,您可以选择创建MyCollection派生自的基类。