通过 dbContext 访问 SQL 中生成的新字段值

Accessing new field value generated in SQL via dbContext

我正在使用 dbContext 并且我正在 运行 宁一个相当复杂的 SQL 查询(下面只显示一个简单的例子),所以为了避免必须 运行 查询两次以获得计数,我根据本网站上的其他建议使用 COUNT AS 到 return 记录总数。

但是,我一直无法弄清楚如何访问结果 属性:

using (var db = new DMSContext())
{
    string queryString = "select *, COUNT(1) OVER() AS TotalRecords FROM DMSMetas";
    var Metas = db.DMSMetas.SqlQuery(queryString).ToList();

    for (int i = 0; i <= Metas.Count - 1; i++)
    {
        var Item = Metas[i];

        if (i == 0)
        {
           //Want to do this, but TotalRecords not part of the DMSMeta class. How to access the created column?
           Console.WriteLine("Total records found: " + Item.TotalRecords);
        }
    }
}

在上面的示例中,SQL 查询生成额外字段 TotalRecords。当我 运行 在 Management Studio 中查询时,结果符合预期。但是如何通过 dbContext 访问 TotalRecords 字段?

我还尝试将 TotalRecords 字段作为 DMSMeta class 的一部分包含在内,但随后 SQL 查询失败并显示指定了 TotalRecords 字段的错误两次。我尝试为包含 TotalRecords 字段的 DMSMeta 创建部分 class,但该值仍然是默认值,并且在查询期间不会更新。

我还尝试了以下方法:

 db.Entry(Item).Property("TotalRecords").CurrentValue

但这也产生了错误。任何帮助将不胜感激 - 我确信我遗漏了一些明显的东西!我只想找出一种方法来访问查询 return 编辑的记录总数

你必须创建一个新的class(不是一个实体class而是一个纯粹的DAOclass)DMSMetaWithCount(不言自明?)然后

context.Database.SqlQuery<DMSMetaWithCount>("select *, COUNT(1) OVER() AS TotalRecords FROM DMSMetas");

请注意

  • 恕我直言,select * 总是一种不好的做法。
  • 您将无法跟踪非新实体 class