ServiceStack.OrmLite - как включить поле из поиска внешнего ключа? - PullRequest
4 голосов
/ 23 декабря 2011

Я пробую ServiceStack MVC PowerPack, пробую включенный OrmLite ORM и пытаюсь получить данные из таблицы, на которую ссылается внешний ключ, без какой-либо идеи, как это сделать.

Например, в примерах OrmLite, использующих базу данных Northwind, можно было бы вернуть объект Shipper, который включал ShipperTypeName, в виде строки, которая просматривалась через внешний ключ "ShipperTypeID"?

С http://www.servicestack.net/docs/ormlite/ormlite-overview, Я бы хотел добавить поле ShipperName в класс Shipper, если это возможно:

[Alias("Shippers")]
public class Shipper : IHasId<int>
{
    [AutoIncrement]
    [Alias("ShipperID")]
    public int Id { get; set; }

    [Required]
    [Index(Unique = true)]
    [StringLength(40)]
    public string CompanyName { get; set; }

    [StringLength(24)]
    public string Phone { get; set; }

    [References(typeof(ShipperType))]
    public int ShipperTypeId { get; set; }
}

[Alias("ShipperTypes")]
public class ShipperType : IHasId<int>
{
    [AutoIncrement]
    [Alias("ShipperTypeID")]
    public int Id { get; set; }

    [Required]
    [Index(Unique = true)]
    [StringLength(40)]
    public string Name { get; set; }
}

1 Ответ

10 голосов
/ 23 декабря 2011

Для этого вам потребуется использовать Raw SQL, содержащий все необходимые поля, и создать новую модель, соответствующую SQL, поэтому для этого примера вы должны сделать что-то вроде:

public class ShipperDetail
{
    public int ShipperId { get; set; }
    public string CompanyName { get; set; }
    public string Phone { get; set; }
    public string ShipperTypeName { get; set; }
}

var rows = dbCmd.Select<ShipperDetail>(
    @"SELECT ShipperId, CompanyName, Phone, ST.Name as ShipperTypeName
        FROM Shippers S INNER JOIN ShipperTypes ST 
                 ON S.ShipperTypeId = ST.ShipperTypeId");

Console.WriteLine(rows.Dump());

Что бы вывести следующее:

[
    {
        ShipperId: 2,
        CompanyName: Planes R Us,
        Phone: 555-PLANES,
        ShipperTypeName: Planes
    },
    {
        ShipperId: 3,
        CompanyName: We do everything!,
        Phone: 555-UNICORNS,
        ShipperTypeName: Planes
    },
    {
        ShipperId: 4,
        CompanyName: Trains R Us,
        Phone: 666-TRAINS,
        ShipperTypeName: Trains
    }
]
...