使用非映射实体从{Db上下文调用存储过程

时间:2016-05-21 13:46:54

标签: c# entity-framework stored-procedures

我想要了解的是如何使用DbContext调用存储过程并返回一个不是实体的对象,如果我没有得到正确的术语,请让我解释一下

我有一个C#Code First Data Context,它有数据库中表的实体模型和映射模型。我还有大约十个存储过程返回报告数据,这些存储过程都没有映射到我拥有的任何实体。

我想要做的是创建一个表示存储过程生成的行的类,以及如何使用参数调用其对应的存储过程并获取List。

我试过这个尝试了解一个简单的存储过程发生了什么,返回5行数据,只有两列

public class ReportA
{
    public string Amount { get; set; }
    public string Name { get; set; }
}

private MyContext _context = new MyContext();

public List<ReportA> GetReportA(DateTime startDate)
    {

var parameters = new[]
        {
            new SqlParameter("@Startdate", SqlDbType.DateTime)
            {
                IsNullable = false,
                Value = startDate
            }
        };



 var result = _context.Database.SqlQuery<List<reportA>>(
            "dbo.ReportA @Startdate", parameters);

return result
}
它开了,但我什么也没收到。任何建议或帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您应该使用以下代码:

var result = _context.Database.SqlQuery<ReportA>(
    "dbo.ReportA @Startdate", parameters);

代替此代码:

var result = _context.Database.SqlQuery<List<ReportA>>(
    "dbo.ReportA @Startdate", parameters);

请注意,我使用SqlQuery<ReportA>而不是SqlQuery<List<ReportA>&gt;。 SqlQuery方法的模板应该是实体将被映射的类型,而不是结果的类型。