【问题标题】:EF7 beta8 FromSQLEF7 beta8 FromSQL
【发布时间】:2016-11-29 19:14:48
【问题描述】:

为EF7 FromSQL解析sql查询获取实体列表。

var accounts = _context.Set<Account>().FromSql("SELECT TOP 10 * FROM Account WITH  
(NOLOCK)").ToList();

上面的这个将返回实体列表,但在某些条件下。

var report = _context.Set<AccountReport>().FromSql("SELECT a.Id, a.Username, p.Item,
p.Quantity FROM Account AS a WITH (NOLOCK) INNER JOIN Purchase AS p WITH (NOLOCK) ON 
p.AccountId = a.Id WHERE p.CreatedOn BETWEEN '2015-11-01' AND '2015-12-01').ToList();

模型“AccountReport”不是实体模型,会遇到这个错误信息。

错误:

Microsoft.Data.Entity.Metadata.ModelItemNotFoundException' 发生在 EntityFramework.Core.dll 中,但未在用户代码中处理

附加信息:未找到实体类型“AccountReport”。确保实体类型已添加到模型中。

【问题讨论】:

  • 您的模型中有 AccountReport 吗?
  • AccountReport 是一个模型,但不是实体模型。这是因为它需要从多个表中聚合一些数据。
  • 但如果它不是你模型的一部分,FromSQL 将无法工作

标签: c# sql entity-framework


【解决方案1】:

当您尝试获取未绑定到 DBSet 的数据时,这应该会有所帮助。

EF7 Fetch dynamic data, not bound to DBSet

另一种方法是按照此处的方式编写 LINQ

Linq to fetch dynamic data in EF7

【讨论】:

    【解决方案2】:

    在选择查询中,您必须选择 AccountReport 的所有不可为空的列,因为选择查询已分配给实体 AccountReport。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-11
      • 2015-04-07
      • 2019-03-13
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多