2014-03-12 119 views
8

我有两个C#类EF5 db.Database.SqlQuery映射返回的对象

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

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

这是在一个呼叫的DbContext用于将返回对象从经由EF5数据库映射出

using (DbEntities db = new DbEntities()) 
{ 
    querySearchResult = db.Database.SqlQuery<SearchResult>(
     @"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(); 
} 

我遇到的问题是,我不能似乎得到甚至映射地址对象虽然有广告着装数据返回。 searchResult的其他属性很好。

回答

10

类SqlQuery不支持Complex Type

你应该做的是:

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

你可以定义复杂的类型?如果一个类继承,父/基类道具会工作吗?这在EF 6.2中仍然有效吗?我无法在msdn上找到很多关于... –