У меня есть список объектов, которые я использую для заполнения с помощью Petapoco.
Свойства и имена классов обрабатывают схему базы данных. Основным классом является Проблема , и он связан с двумя другими классами, имена и свойства которых также соответствуют схеме базы данных: Condition и SeverityLevel .
public class Issue
{
public int Id { get; set; } // Primary key
/* Some properties... */
public DateTime? CreatedOn { get; set; }
public string CreatedBy { get; set; }
public DateTime? ModifiedOn { get; set; }
public string ModifiedBy { get; set; }
/* ... */
// Related source and target conditions
[PetaPoco.Ignore]
public Condition SourceCondition { get; set; }
[PetaPoco.Ignore]
public Condition TargetCondition { get; set; }
// Related severity level
[PetaPoco.Ignore]
public SeverityLevel CurrentSeverityLevel { get; set; }
}
public class Condition
{
public int Id { get; set; } // Primary Key
public string Description { get; set; }
}
public class SeverityLevel
{
public int Id { get; set; } // Primary key
public string Description { get; set; }
public string HexColorDisplay { get; set; }
}
Фактически , когда я получаю список проблем, я использую функцию множественного сопоставления для получения списка проблем и связанных уровней серьезности с помощью одной команды:
var Results = Db.Fetch<Issue, SeverityLevel, Issue>(
(i, sl) => {
i.CurrentSeverityLevel = sl;
return i;
},
"SELECT /* ..shortened.. */ FROM Issue " +
"LEFT JOIN SeverityLevel ON SeverityLevel.Id = Issue.SeverityLevelId " +
"WHERE Issue.Id=@0", issueId);
Теперь, поскольку Petapoco, похоже, не обрабатывать несколько СОЕДИНЕНИЙ, мне нужно сделать второй шаг, чтобы прикрепить SourceCondition и TargetCondition к каждой полученной мной проблеме.
Для этого я мог либо:
На данный момент я использую второе решение, потому что в базе данных есть ограниченный набор условий.
В любом случае, мне кажется, что это немного сложно, потому что для этого требуется почти столько же запросов по мере добавления таблиц JOINED.
Интересно, смогу ли я добиться такой работы:
var Results = Db.Fetch</* ????? */>(
/* ???? */
"SELECT /* ..shortened.. */ FROM Issue " +
"LEFT JOIN SeverityLevel ON SeverityLevel.Id = Issue.SeverityLevelId " +
"LEFT JOIN Condition Con1 ON Con1.Id = Issue.SourceConditionId " +
"LEFT JOIN Condition Con2 ON Con2.Id = Issue.TargetConditionId " +
"WHERE Issue.Id=@0", issueId);
Уважаемые пользователи Petapoco, дорогой автор Petapoco, это способ справиться с этим?
Могу ли я использовать Dapper для сделок вместо этого (если может ...), приложение Я абсолютно хочу сохранить Petapoco для операций обновления / вставки?