【问题标题】:Calling Stored Procedure From Db Context with an non mapped entity使用未映射的实体从 Dbcontext 调用存储过程
【发布时间】:2016-05-21 13:46:53
【问题描述】:

我想了解的是如何使用 DbContext 调用存储过程并返回一个不是实体的对象,好的,让我再解释一下,以防我没有正确理解术语

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

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

我已经尝试过这个程序,试图了解一个返回 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
}

它会触发,但我什么也得不到。任何建议或帮助将不胜感激

【问题讨论】:

  • 这并不像在查询末尾添加 .ToList() 那样简单吗? SqlQuery 只是返回一个原始查询,您需要调用 .ToList() 来实际返回数据。

标签: c# entity-framework stored-procedures


【解决方案1】:

您应该使用以下代码:

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

代替这段代码:

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

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

【讨论】:

  • 我在返回数据的时候还在var结果中加了一个.ToList(),return result.ToList();非常感谢您的工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多