Можно Multimapping Petapoco обрабатывает несколько JOIN?

У меня есть список объектов, которые я использую для заполнения с помощью 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 к каждой полученной мной проблеме.

Для этого я мог либо:

  • прикрепить Исходное и целевое условие после чтения в цикле foreach
  • или получение всего списка Condition, а затем присоединение к каждой проблеме с использованием одного и того же типа for-each.

На данный момент я использую второе решение, потому что в базе данных есть ограниченный набор условий.

В любом случае, мне кажется, что это немного сложно, потому что для этого требуется почти столько же запросов по мере добавления таблиц 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 для операций обновления / вставки?

8
задан Larry 12 July 2011 в 12:36
поделиться