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; }
}