【问题标题】:ServiceStack.OrmLite - can I do something like Db.Select<Foo, Bar>()?ServiceStack.OrmLite - 我可以执行 Db.Select<Foo, Bar>() 之类的操作吗?
【发布时间】:2014-02-25 17:16:22
【问题描述】:

如何使用 Service.OrmLite 来自两个表 JOINSelect 数据,而无需为此目的创建另一个 Poco (Coal+Data)。

我有用于 Coal 和 CoalData 的 Poco,例如:

class Coal {
    // PK
    public long Id {get; set;}
    public string Name {get; set;}
}

class CoalData {
    // FK
    public long Id {get; set;}
    public int Prop1 {get; set;}
    ....
}

在 Dapper 中很简单 like:

var personWithAddress = connection
    .Query<Person, Address, Extra, Tuple<Person, Address, Extra>>
    (sql, (p, a, e) => Tuple.Create(p, a, e), splitOn: "AddressId,Id").First();

【问题讨论】:

    标签: c# ormlite-servicestack servicestack-bsd


    【解决方案1】:

    ServiceStack.OrmLite 不支持像您建议的那样连接两个或多个表。它目前只支持简单的表达式,对于连接,它建议回退到原始 SQL 查询。 See here 用于 OrmLite 功能。

    对于更复杂的事情(例如,使用表连接的查询),您仍然可以轻松地回退到原始 SQL 查询,如下所示。

    不过,ServiceStack.OrmLite 可能会在不久的将来获得更好的连接支持,因为这是顶级的 open feature request,但在商业 ServiceStack 产品之下。

    【讨论】:

    • 使用 3.9.71 和 MS SQL Server var coal = Service.Db.Select&lt;CoalJoin&gt;(@"SELECT * FROM [dbo].[Coal] AS c INNER JOIN [dbo].[CoalData] AS cd ON [c].[Id] = [cd].[CoalId] WHERE c.Id = @Id", new {Id = request.Id}); 没有替换查询中的 @Id
    • @Tomasito 如果您使用的是 3.9.71,则需要使用 Service.Db.Query 而不是 Service.Db.Select。 v3 的文档在这里。它使用稍微不同的语法。
    • 我忽略了这个片段。现在我的测试通过了。
    猜你喜欢
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多