ORMLite / Servicestack:一起加入多个嵌套表

时间:2018-01-18 01:42:05

标签: c# postgresql servicestack ormlite-servicestack

我认为这应该很容易,而且我不确定我是否只是遗漏了某些内容,或者当前是否缺少ServiceStack / ORMLite中的此功能。我有一个看起来像这样的表结构:

[Table Foo]
Id: GUID
... Fields

[Table Bar]
Id: GUID
FooId: GUID (references Foo.Id)
... Fields

[Table Baz]
Id: GUID
BarId: GUID (References Bar.Id)
... Fields

我想要做的是在一次返回中返回一个封装所有Foo,Bar和Baz的对象,这样我就可以高效地处理我的数据库请求。类似的东西:

SELECT *
FROM foo, bar, baz
WHERE foo.Id = bar.FooId && bar.Id = baz.BarId

我知道如何在SQL中编写它,但我正在努力学习如何在ORMLite / Servicestack中编写它。来自Mythz的This回答似乎指出这不是ServiceStack中的一个东西,但这个答案也是几年前的答案,所以我想知道在此期间发生了什么变化。我可以迭代遍历对象并手动加载第二个连接,因为我真的只需要来自最后一个嵌套表的单个字段,但是当我真的应该能够执行所有操作时,仍然感觉要执行太多的数据库调用在一个电话中,但我找不到任何关于如何的文件。

1 个答案:

答案 0 :(得分:3)

您可以使用OrmLite's SelectMulti API,例如:

var q = db.From<Foo>()
    .Join<Foo, Bar>()
    .Join<Bar, Baz>();

var results = db.SelectMulti<Foo, Bar, Baz>(q);

foreach (var tuple in results)
{
    Foo foo = tuple.Item1;
    Bar bar = tuple.Item2;
    Baz baz = tuple.Item3;
}