servicestack - OrmLite 通过多列连接表

标签 servicestack ormlite-servicestack

使用 OrmLite 如何通过多列连接表?

我有 Notes 表,其中可以包含 QutoeHeaderOrderHeader 的数据,因此我尝试加入并使用 SelectMulti() 像这样:

var userSpecificQuery =
    _db
        .From<Customer>()
        .Where(x => x.SalesRepresentativeId == userId)
        .LeftJoin<Customer, QuoteHeader>((c, q) => c.Id == q.CustomerId)
        .LeftJoin<Customer, OrderHeader>((c, o) => c.Id == o.CustomerId)
        .LeftJoin<OrderHeader, QuoteHeader, Notes>((oh,qh, n) => oh.Id == n.OrderId || qh.Id == n.QuoteId)
    ;


var userSpecificRecords = 
    _db.SelectMulti<Customer, QuoteHeader, OrderHeader, Notes>(userSpecificQuery);

但是我收到错误:

table name "quote_header" specified more than once

我想加入与 OrderId 或 QuoteId 匹配的所有记录。我尝试了几种不同的方法并得到相同的错误。这可能吗?

编辑:

这是笔记模型

public class Notes : BaseModel
{
    [AutoIncrement]
    public long Id { get; set; }
    [ForeignKey(typeof(QuoteHeader))]
    public long? QuoteId { get; set; }
    [ForeignKey(typeof(OrderHeader))]
    public long? OrderId { get; set; }
    public string NoteText { get; set; }
}

最佳答案

不要多次加入QuoteHeader,而是将条件移至Where:

db.From<Customer>()
  .Where(x => x.SalesRepresentativeId == userId)
  .LeftJoin<Customer, QuoteHeader>((c, q) => c.Id == q.CustomerId)
  .LeftJoin<Customer, OrderHeader>((c, o) => c.Id == o.CustomerId)
  .LeftJoin<OrderHeader, Notes>((oh, n) => oh.Id == n.OrderId)
  .Where<OrderHeader,QuoteHeader,Notes>((oh,qh,n) => oh.OrderId != null || qh.Id == n.QuoteId)

关于servicestack - OrmLite 通过多列连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60537883/

相关文章:

c# - ServiceStack Razor - 默认文档出现 "Forbidden"错误

sqlite - 使用 Sqlite64 作为内存数据库的 ServiceStack OrmLite 导致身份验证表丢失

servicestack ormlite部分更新

postgresql - Servicestack ORMLite - 在 PostgreSQL 中使用 XML 字段

c# - ServiceStack.Text json 反序列化创建错误的对象而不是抛出无效的 json 输入字符串

sql-server - ServiceStack OrmLite 未检索 SqlGeography 字段

.net - ServiceStack SOAP 端点在验证错误时返回 HTML

servicestack - 向 ServiceStack 身份验证提供程序添加功能

mysql - ServiceStack.OrmLite : Implementing custom StringConverter affects column type of complex BLOB fields

c# - 服务堆栈性能