我认为这应该很容易,而且我不确定我是否只是遗漏了某些内容,或者当前是否缺少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中的一个东西,但这个答案也是几年前的答案,所以我想知道在此期间发生了什么变化。我可以迭代遍历对象并手动加载第二个连接,因为我真的只需要来自最后一个嵌套表的单个字段,但是当我真的应该能够执行所有操作时,仍然感觉要执行太多的数据库调用在一个电话中,但我找不到任何关于如何的文件。
答案 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;
}