OrmLite / Servicestack: как указать, из какой таблицы вы хотите получить столбец, если каждая объединяемая таблица имеет одинаковое имя столбца?

Я довольно новичок в этих технологиях, и у меня возникли проблемы с конкретной проблемой. У меня есть класс, определенный как таковой:

public class CameraDetail
{
    public int I_id { get; set; }
    public string C_division_id { get; set; }
    // ....some other members....
}

... и Servicetack отправляет их список с конечной точки. Это все работает, но моя конкретная конечная точка выполняет некоторые объединения таблиц, чтобы получить конкретные записи, и каждая таблица в нашей базе данных имеет первичный ключ I_id, Итак, в текущем запросе здесь:

public List<CameraDetail> GetCameraDetailForStore(string storeId)
{

    List<CameraDetail> ret = null;

    // this is inside a using statement I didn't copy, just assume 'conn' exists
    conn.Open();

    ret = conn.Select<CameraDetail>(
        conn.From<cctv_camera>()
            .Join<cctv_camera, cctv_dvr>((c, d) => c.C_dvr_id == d.C_dvr_id)
            .And<cctv_dvr>(d => d.C_store_id == storeId)
            .Join<cctv_camera, cctv_vendor>((c, v) => c.C_vendor_id == v.C_vendor_id)
            .Where(c => c.C_store_id == storeId))
}

... я возвращаю первичный ключ I_idс из cctv_vendor стол, когда мне действительно нужны они из cctv_camera Таблица.

я пробовал .PopulateWith а также .PopulateWithNonDefaultValues, но точно не повезло. Мне интересно, есть ли что-то, что я пропускаю или у кого-нибудь есть какие-либо предложения. Спасибо!

1 ответ

Решение

Документы OrmLite содержат примеры, показывающие, как вы можете выбирать данные из нескольких таблиц, где вы можете получить конкретное поле из таблицы, которую хотите, добавив имя таблицы к имени поля в вашей пользовательской таблице, например, чтобы получить I_id поле из cctv_camera ты можешь использовать:

public class CameraDetail
{
    public int cctv_cameraI_id { get; set; }
}

В качестве альтернативы вы можете использовать атрибут BelongsTo, например:

public class CameraDetail
{
    [BelongTo(typeof(cctv_camera))]
    public int I_id { get; set; }
}

Или, если вы хотите использовать в своей модели совершенно другое имя, вы можете просто использовать свойство getter, например:

public class CameraDetail
{
    public int Id => cctv_cameraI_id;
    public int cctv_cameraI_id { get; set; }
}
Другие вопросы по тегам