我正在使用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();
答案 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对象的列表。