【问题标题】:Accessing un-mapped entities from Entity Framework SqlQuery从实体框架 SqlQuery 访问未映射的实体
【发布时间】:2018-09-09 10:55:56
【问题描述】:

我正在使用实体框架,我有一个包含 2 个字段的实体类:

  • 姓名
  • 说明

我有一个存储过程,它返回的正是上面的实体加上一个名为TotalRecords 的附加实体。我在上面的类中创建了一个名为TotalRecords 的新实体,并向它添加了一个属性[NotMapped]

现在当我调用存储过程时,它并没有映射到新实体TotalRecords;我明白了,因为我在上面添加了一个属性 [NotMapped],但如果我不应用该属性,它只会在我的数据库表中创建一个新列,这不是我的意图。

以下是我调用SqlQuery 来执行存储过程的方式:

var _products = db.Products.SqlQuery("GetProductsByCategory @p0,@p1,@p2", categoryID, pageIndex, Common.PAGE_SIZE).ToList();

谁能告诉我如何从存储过程中获取TotalRecords 字段,而不在数据库中添加新列?正如我上面所说,我只有一列额外的其余部分都被映射到数据库表Products

【问题讨论】:

  • 据我所知,您想从存储过程中返回 3 个字段(名称、描述、TotalRecords),对吧?
  • 是的,没错。

标签: c# asp.net entity-framework


【解决方案1】:

您所要做的就是创建一个与存储过程返回的结果具有相同属性名称的对象。您可以尝试按照示例进行操作。希望能帮到你,我的朋友。

1) 首先,像这样创建一个类:

public class ProductResult
    {
        public string Name { get; set; }

        public string Description { get; set; }

        public decimal TotalRecords { get; set; }
    }

2) 然后调用程序:

using(var context = new DatabaseContext())
    {
            var categoryIdParameter = new SqlParameter("@p0", categoryID);
            var pageIndexParameter = new SqlParameter("@p1", pageIndex);
            var pageSizeParameter = new SqlParameter("@p2", Common.PAGE_SIZE);

            var result = context.Database
                .SqlQuery<ProductResult>("GetProductsByCategory @p0, @p1, @p2", categoryIdParameter, pageIndexParameter, pageSizeParameter)
                .ToList();
    }

结果将包含 ProductResult 对象的列表。

【讨论】:

  • 但这会在数据库中添加属性(TotalRecords),因为 ProductResult 模型映射到数据库。
  • @Abbas:你能展示一下存储过程 GetProductsByCategory 吗?
猜你喜欢
  • 2011-03-09
  • 2011-08-28
  • 2013-10-18
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2010-10-09
  • 2017-02-11
  • 1970-01-01
相关资源
最近更新 更多