了解多个表的限制以返回信息

时间:2014-02-12 12:09:07

标签: c# nhibernate

我在如何构建关系方面遇到了一些麻烦。

  • FooBar个,Bar可以有多个Foo
  • FooZaz个,Zaz可以有多个Foo
  • Bar可以有多个Zaz个,而Zaz可以有一个Bar
    • BarZaz
    • 只能有一个Foo

因此,例如,我应该能够执行以下操作(假设每种类型中只有一个元素以简化):

// get a single Foo
Foo foo = this.Session.Get<Foo>(1);
// get a single Bar
Bar bar = this.Session.Get<Bar>(1);
// no restriction on Foo so get a collection
IEnumerable<Zaz> allZazsInFoo = foo.Zazs;
// no restriction on Bar so get a collection
IEnumerable<ZaZ> allZazsInBar = bar.Zazs;
// restriction on Foo by Bar so only one Zaz
Zaz zazOfABarInFoo = foo.Bars.Single().Zaz;
// restriction on Bar by Foo so only one Zaz
Zaz zazOfAFooInBar = bar.Foos.Single().Zaz;

这有意义吗?这种形式的关系(或类似的东西)在NHibernate中是否可能?

1 个答案:

答案 0 :(得分:0)

好吧,我最终选择的实际上是非常容易的。

在我添加的Foo课程中:

public virtual Zaz GetZaz(int barId)
{
    return this.Zazs.SingleOrDefault(x => x.Bar.Id == barId);
}

然后这样打电话:

Bar aBarInFoo = foo.Bars.Single();
Zaz zazOfABarInFoo = foo.GetZaz(aBarInFoo.Id);