从实体框架SqlQuery访问未映射的实体

时间:2018-09-08 11:52:07

标签: c# asp.net entity-framework

我正在使用Entity Framework,我有一个实体类,其中包含2个字段:

  • 名称
  • 说明

我有一个存储过程,该过程返回上面的实体以及另外一个称为true的实体。我在上面的类中创建了一个名为false的新实体,并向其中添加了一个属性TotalRecords

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

这是我调用TotalRecords来执行存储过程的方式:

[NotMapped]

谁能告诉我如何从存储过程中获取SqlQuery字段,而无需在数据库中添加新列?就像我在上面说过的,我只剩下一栏,其余的都被映射到数据库表var _products = db.Products.SqlQuery("GetProductsByCategory @p0,@p1,@p2", categoryID, pageIndex, Common.PAGE_SIZE).ToList();

1 个答案:

答案 0 :(得分:0)

您要做的就是创建一个对象,该对象的属性名称与存储过程返回的结果相同。您可以尝试遵循示例。希望对您有帮助,我的朋友。

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对象的列表。