2016-10-21 6 views
0

Ich möchte mein Objekt Master Detail mit Daten aus einer SQL Server-Abfrage füllen.Füllen eines Objekts aus einer SQL-Abfrage

Allerdings scheint ich nicht den Detail Teil der Abfrage korrekt zu bilden.

Ist es überhaupt möglich?

Ich habe die folgenden Klassen

public class OrderCountReportHeader : IMyReport 
{ 

    [Key] 
    public int Id { get; set; } 
    public DateTime RunAt { get; set; } 
    public string Name { get; set; } 
    public virtual List<OrderCountReportDetail> Details { get; set; } 

} 

public class OrderCountReportDetail { 
    public virtual OrderBankReportHeader Header { get; set; } 
    public string ProductCode { get; set; } 
    public int Quantity { get; set; } 

}

und ich eine Instanz von OrderCountReportHeader aus der Ausgabe einer SQL-Abfrage

private static string ReportSql() { 

     return @" 
       SET NOCOUNT ON; 
       select 1 as Id, getdate() as RunAt, 'test' as Name; 
       select 'RC' as ProductCode , 5 as Quantity; " 
      ; 
    } 

var result = context.Database.SqlQuery<OrderCountReportHeader>(sql).ToArray()[0]; 

    Assert.AreEqual(@"test", s.Name); // true 
    Assert.AreEqual("RC", s.Details[0].ProductCode); // fails because Details is null 

Antwort

0

ich Liquidation auffüllen möchten mit zwei getrennten Anrufe an SqlQuery obwohl ich würde mich freuen, einen besseren Weg zu wissen.

var header = connect.Database.SqlQuery<OrderCountReportHeader>(ReportSqlHeader()).ToArray()[0]; 

      var details = connect.Database.SqlQuery<OrderCountReportDetail>(ReportSqlDetails()).ToList(); 
      foreach (var det in details) 
      { 
       det.Header = header; 
      } 
      header.Details = details; 
Verwandte Themen