ServiceStack AutoQuery присоединиться использовать
Прочитав документацию, я не уверен, но я пришел к выводу, что при создании QueryDb вы не можете выбрать столбцы для объединения? И у меня сложилось впечатление, вы должны иметь объект DTO для копирования? Вы не можете скопировать в обычный объект или динамический объект?
public class SampleAutoQueryDb : QueryDb<MailResponseDetailOrm, object>, ILeftJoin<MailResponseDetailOrm, MailResponseOrm> { }
Может ли кто-нибудь дать представление о присоединении моей MailResponseOrm к MailResponseDetailOrm. MailResponseDetailOrm имеет 5 полей, а именно Email
адрес. И я хотел бы, чтобы MailResponseOrm был присоединен к нему Email
также. Я также, для хорошей меры, не хочу изменять ни одно имя столбца. Должен ли я создать собственную реализацию или сервис для этого?
ОБНОВИТЬ
Вот мой код, как указано ниже:
[Alias("MailReportsDetail")]
public class MailResponseDetailOrm
{
public string Email { get; set; }
public int ID { get; set; }
[Alias("RespDate")]
public DateTime? AddedDateTime { get; set; }
[Alias("DLReport")]
public string Action { get; set; }
public string ActionDetail { get; set; }
public string IP { get; set; }
public string UserAgent { get; set; }
public string EmailReferrer { get; set; }
}
[Alias("MailReports")]
public class MailResponseOrm
{
public int ID { get; set; }
public string Email { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string Company { get; set; }
public string Contact { get; set; }
public string Country { get; set; }
[Alias("LastMail")]
public DateTime? ModifiedDateTime { get; set; }
[Alias("LastReport")]
public string Action { get; set; }
public DateTime? OptOut { get; set; }
public string Part { get; set; }
public string Phone { get; set; }
public string PostalCode { get; set; }
public string Source { get; set; }
public string State { get; set; }
public string Title { get; set; }
#region Obsolete
[Obsolete]
public string Class { get; set; }
[Obsolete]
public string IP { get; set; }
#endregion
}
public class SampleAutoQueryDb : QueryDb<MailResponseDetailOrm> { }
public class MyQueryServices : Service
{
public IAutoQueryDb AutoQuery { get; set; }
// Override with custom implementation
public object Any(SampleAutoQueryDb query)
{
var q = AutoQuery.CreateQuery(query, base.Request);
q.Join<MailResponseDetailOrm, MailResponseOrm>((x, y) => x.Email == y.Email)
// .Select<MailResponseDetailOrm, MailResponseOrm>((x, y) => new { x.ID, y.Email })
;
return AutoQuery.Execute(query, q);
}
}
2 ответа
Для объединений в AutoQuery необходимо использовать условные обозначения Справочника объединений OrmLite, и все результаты служб AutoQuery возвращаются в типизированном DTO, который по умолчанию представляет собой запрашиваемую таблицу, или вы можете использовать QueryDb<From,Into>
базовый класс для возврата пользовательского результата столбцов из нескольких соединенных таблиц.
Вам потребуется использовать пользовательскую реализацию AutoQuery или собственную реализацию службы, если вам нужны настройки, выходящие за рамки этого, например:
public class SampleAutoQueryDb : QueryDb<MailResponseDetailOrm> { }
public class MyQueryServices : Service
{
public IAutoQueryDb AutoQuery { get; set; }
// Override with custom implementation
public object Any(SampleAutoQueryDb query)
{
var q = AutoQuery.CreateQuery(query, base.Request);
q.Join<MailResponseDetailOrm,MailResponseOrm>((x, y) => x.Email == y.Email);
return AutoQuery.Execute(query, q);
}
}
// Запрос на объединение 2-х объектов по именам полей, не заданным в классе.
var q = Db.From<MailResponseDetailOrm>().Join<MailResponseDetailOrm>(x,y) => x.Email = y.Email);
// Запустить запрос
var results = Db.Select(q);