我有两个C#类
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映射的其他属性很好。
SqlQuery不支持 Complex Type
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, [...] } }