繁体   English   中英

代码优先EF6-如何转换为不是实体的自定义对象

[英]Code First EF6 - How to translate to a custom object thats not an entity

我有一个存储过程返回2列。 第一个是实体(UserId)的ID列,第二个是对多少个UserIds(Count)的计数。

在代码中,我想将其翻译成Dictionary,其中User是EF实体。

var result = ((IObjectContextAdapter)dbContext).ObjectContext.Translate<Dictionary<User, int>>(reader).FirstOrDefault();

这将返回一个空的Dictionary,并且似乎翻译无法按我希望的方式工作。

我在猜测,因为我只返回UserId,所以它无法实现为完整的User实体。

有人可以提供一个示例,说明如何获得所需的最终结果吗?

查看文档

提供的DbDataReader必须包含映射到请求的实体类型的数据。

因此,您的代码有两件事是错误的:

  • 您要实现的类型是字典,而不是实体类型
  • 并且如果是实体类型,则读取器将不会包含映射到所请求实体类型的数据 ,即具有与实体属性相对应的值的行。

您必须使用存储过程返回的id值通过单独的查询来获取用户。 遵循以下原则:

var sprocValues = GetStoredProcedureValues();
// Let's assume this returns a List of Tuple<int,int>

var usrIds = sprocValues.Select(t => t.Item1).ToArray();
var users = dbContext.Users.Where(u => usrIds.Contains(u.UserID)).ToArray();
var result = from u in users
             join t in sprocValues on u.UserID equals t.Item1
             select new { User = u, Count = t.Item2 };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM