2016-10-14 7 views
4

Ich verwende Insight.Database als unsere Mikro-ORM. Ich wollte herausfinden, ob es eine Möglichkeit gibt, die folgenden POCO-Klassenzuordnungen zu verwenden und Ergebnisse aus einer einzelnen Zeile in diese Objekte zu mappen.Insight.Datenbank Spalte Zuordnung zu Objekt

public class Rule 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public RuleDetail Source { get; set; } 
    public RuleDetail Destination { get; set; } 
} 

public class RuleDetail 
{ 
    public int Id { get; set; } 
    public Name { get; set; } 
    public Date DateTime { get; set; } 
    // omitted... 
} 

Hier ist die Spalten, die von unserer gespeicherten Prozedur zurückgegeben werden:

Id 
Name 

// Should map to Source object. 
SourceId 
SourceName 
SourceDateTime 

// Should map to Destination object. 
DestinationId 
DestinationName 
DestinationDateTime 

Antwort

0

Sie versuchen

public interface IRepo 
{ 
    [Recordset(1, typeof(RuleDetail), into="Source", IsChild=true)] 
    [Recordset(2, typeof(RuleDetail), into="Destination", IsChild=true)] 
    Rule GetFullyPopulatedRuleByIdStoredProcedure(int id); 
} 

Sie müssen drei Cord-Sets zurückkehren konnte - das erste [Recordset (0)] ist deine Regel, die anderen beiden enthalten Quelle und Ziel. Ich benutze diese Anordnung sehr, es funktioniert gut für mich.

Ich kenne keine Möglichkeit, dies zu tun, wenn Sie eine einzelne Zeile in einem einzelnen Re-Cord-Set zurückgeben.

1

Dies ist mit ein wenig Setup auf der Abfrageseite möglich. Nicht sicher, ob das mit Attributen möglich ist.

var returns = Query.Returns(
    new OneToOne<Rule, RuleDetail, RuleDetail>(
     callback: (rule, source, destination) => { 
      rule.Source = source; 
      rule.Destination = destination; 
     }, 
     columnOverride: new ColumnOverride[] { 
      new ColumnOverride<RuleDetail>("SourceId", "Id"), 
      new ColumnOverride<RuleDetail>("SourceName", "Name"), 
      new ColumnOverride<RuleDetail>("SourceDateTime", "DateTime"), 
      new ColumnOverride<RuleDetail>("DestinationId", "Id"), 
      new ColumnOverride<RuleDetail>("DestinationName", "Name"), 
      new ColumnOverride<RuleDetail>("DestinationDateTime", "DateTime"), 
     }, 
     splitColumns: new Dictionary<Type, string>() { 
      { typeof(Rule), "Id" }, 
      { typeof(RuleDetail), "SourceId" }, 
      { typeof(RuleDetail), "DestinationId" }, 
     } 
    ) 
); 
return Db.Query(procedure, params, returns); 

Ich bin mir nicht sicher, ob alle dieser Code ist erforderlich, damit es funktioniert, aber es auf jeden Fall zeigt, wie mächtig die anfragende in Insight.Database sein kann.

Verwandte Themen