【问题标题】:How to manually create Proxy for Detail Collection in NHibernate如何在 NHibernate 中手动创建详细信息收集代理
【发布时间】:2011-08-11 12:25:19
【问题描述】:

我有课,让它成为 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当我访问 Details 以获取所有 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>

谢谢!

【问题讨论】:

  • 你不为_details使用字段初始化器吗?如果您将项目添加到新的 Foo,_details 将保持为空。
  • 因为我们的业务逻辑 - 我们一直通过 Wcf 线移动对象,从服务器 2 客户端和返回,我们不想关心它们 =)

标签: linq nhibernate collections proxy


【解决方案1】:

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

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

【讨论】:

  • 我错了是的,你是对的,它实现了IUserCollectionType;
猜你喜欢
  • 2014-10-15
  • 2010-11-04
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
相关资源
最近更新 更多