2014-03-12 11 views
8

ich zwei C# -Klassen habenEF5 db.Database.SqlQuery Mapping zurückgegebenen Objekte

public class SearchResult 
{ 
    public int? EntityId { get; set; } 
    public string Name { get; set; } 
    public Address RegisteredAddress { get; set; } 
} 

und

public class Address 
{ 
    public int? AddressId { get; set; } 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string Address3 { get; set; } 
} 

dies in einem DbContext Aufruf verwendet wird, um die Rückkehr Objekte aus einer Datenbank über EF5 zu kartieren

Das Problem, das ich habe, ist, dass ich nicht scheinen kann, das Adressobjekt zugeordnet zu bekommen, obwohl es eine Anzeige gibt Kleidungsdaten zurückgegeben. Die anderen Eigenschaften der searchResult-Map sind in Ordnung.

Antwort

10

sqlquery nicht unterstützt Complex Type

Was sollten Sie tun, ist:

internal class TempResult 
{ 
    public int? EntityId { get; set; } 
    public string Name { get; set; } 
    public int? AddressId { get; set; } 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string Address3 { get; set; } 
} 

var tempResults = db.Database.SqlQuery<TempResult>(
    @"SELECT e.entity_id AS EntityId, e.entity_reg_name AS Name, 
      a.address_1 AS [RegisteredAddress.Address1] 
     FROM 
      entity AS e 
      LEFT JOIN address AS a ON e.entity_reg_addr_id = a.address_id", 
    objectParameterList.ToArray()).ToList(); 

querySearchResult = tempResults.Select(t => new SearchResult 
{ 
    EntityId = t.EntityId, 
    [...] 
    RegisteredAddress = new Address 
     { 
      AddressId = t.AddressId, 
      [...] 
     } 
} 
+0

Könnten Sie komplexen Typen definieren? Wenn eine Klasse erbt, würden die Eltern-/Basisklassenrequisiten funktionieren? Und ist das in EF 6.2 noch gültig? Ich kann nicht viel darüber auf MSDN finden ... –

Verwandte Themen