ORMLite/Servicestack:将多个嵌套表连接在一起
ORMLite/Servicestack: Joining Multiple Nested Tables Together
我认为这应该很容易,我不确定我是否只是遗漏了一些东西,或者目前 ServiceStack/ORMLite 是否缺少此功能。我有一个看起来像这样的 table 结构:
[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
我想要做的是 return 将所有 Foo、Bar 和 Baz 封装在一个 return 中的单个对象,这样我就可以高效地处理我的数据库请求。类似于:
SELECT *
FROM foo, bar, baz
WHERE foo.Id = bar.FooId && bar.Id = baz.BarId
我知道我想在 SQL 中如何写它,但我正在为如何在 ORMLite/Servicestack 中写它而苦恼。 This 来自 Mythz 的回答似乎表明这在 ServiceStack 中还不是一个问题,但这个回答实际上也是几年前的事情,所以我想知道在此期间是否有任何变化。我可以遍历对象并手动加载第二个连接,因为我真的只需要最后一个嵌套 table 中的一个字段,但是当我真的应该能够时,这仍然感觉像是对数据库进行了太多调用在一个电话中完成所有这些,但我找不到任何关于如何做的文档。
您可以为此使用 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;
}
我认为这应该很容易,我不确定我是否只是遗漏了一些东西,或者目前 ServiceStack/ORMLite 是否缺少此功能。我有一个看起来像这样的 table 结构:
[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
我想要做的是 return 将所有 Foo、Bar 和 Baz 封装在一个 return 中的单个对象,这样我就可以高效地处理我的数据库请求。类似于:
SELECT *
FROM foo, bar, baz
WHERE foo.Id = bar.FooId && bar.Id = baz.BarId
我知道我想在 SQL 中如何写它,但我正在为如何在 ORMLite/Servicestack 中写它而苦恼。 This 来自 Mythz 的回答似乎表明这在 ServiceStack 中还不是一个问题,但这个回答实际上也是几年前的事情,所以我想知道在此期间是否有任何变化。我可以遍历对象并手动加载第二个连接,因为我真的只需要最后一个嵌套 table 中的一个字段,但是当我真的应该能够时,这仍然感觉像是对数据库进行了太多调用在一个电话中完成所有这些,但我找不到任何关于如何做的文档。
您可以为此使用 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;
}