У меня есть объекты списка, которые я использую для заполнения с помощью Petapoco.
Свойства и имена классов соответствуют схеме базы данных. Основным классом является Issue, и он связан с двумя другими классами, имена и свойства которых также соответствуют схеме базы данных: Condition< /strong> и Уровень серьезности.
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, похоже, не обрабатывает несколько JOINS, мне нужно сделать второй шаг, чтобы присоединить SourceCondition и TargetCondition strong> к каждому найденному выпуску.
Для этого я мог бы:
- прикрепите исходное и целевое условие после чтения в цикле foreach,
- или получить весь список условий, а затем прикрепить его к каждому выпуску, используя один и тот же вид для каждого.
На данный момент я использую второе решение, поскольку в базе данных имеется ограниченный набор условий.
Как бы то ни было, мне кажется, что делать таким образом немного сложно, потому что для этого требуется выполнить почти столько же запросов, сколько добавляется 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 для моих операций обновления/вставки?