【问题标题】:EF5 db.Database.SqlQuery mapping returned objectsEF5 db.Database.SqlQuery 映射返回的对象
【发布时间】:2014-03-12 17:36:44
【问题描述】:

我有两个 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 映射的其他属性很好。

【问题讨论】:

    标签: c# sql entity-framework dbcontext


    【解决方案1】:

    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,
                [...]
            }
    }
    

    【讨论】:

    • 你能定义复杂类型吗?如果一个类继承,父/基类道具会起作用吗?这在 EF 6.2 中仍然有效吗?我在 msdn 上找不到太多关于此的信息...
    • 如果某个属性是 List 怎么办?
    猜你喜欢
    • 2018-05-30
    • 2021-02-17
    • 2023-02-09
    • 2021-09-10
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多