我正在使用 MySQL 存储过程并尝试使用 EF6 检索单个结果集。我的存储过程包含简单的 select 语句,我已将其映射到我的模型中。下面是 EF 生成的映射到我的存储过程的类
public partial class usp_aggregatedLogs_Result
{
}
它是由 EF 生成的空类。我已将属性添加到此类以将其映射到存储过程返回的结果集。
public partial class usp_aggregatedLogs_Result
{
public int AccountId { get; set; }
public string AccountName { get; set; }
public string ProjectId { get; set; }
public string ProjectName { get; set; }
public string SystemId { get; set; }
public string SystemName { get; set; }
public string ParameterId { get; set; }
public string ParameterName { get; set; }
public Nullable<System.DateTime> TimeStamp { get; set; }
public long LogId { get; set; }
public string Type { get; set; }
}
下面是EF在DBContext类中生成的代码
public virtual ObjectResult<usp_aggregatedLogs_Result> usp_aggregatedLogs(Nullable<System.DateTime> dateFrom, Nullable<System.DateTime> dateTo)
{
var dateFromParameter = dateFrom.HasValue ?
new ObjectParameter("DateFrom", dateFrom) :
new ObjectParameter("DateFrom", typeof(System.DateTime));
var dateToParameter = dateTo.HasValue ?
new ObjectParameter("DateTo", dateTo) :
new ObjectParameter("DateTo", typeof(System.DateTime));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<usp_aggregatedLogs_Result>("usp_aggregatedLogs", dateFromParameter, dateToParameter);
}
我假设调用此函数应该返回存储过程返回的结果集。我是这样调用它的
List<usp_aggregatedLogs_Result> ResultList= obj.usp_aggregatedLogs(DateFrom, DateTo).ToList();
我在 ResultList 中收到了结果。我收到 43 个正确的对象,因为我的存储过程返回 43 行。但是我没有得到这些对象的属性值。所有属性值都设置为 0 或 null。似乎我的 ResultList 对象未初始化。
我不知道如何正确调用我的存储过程并将其结果集检索到我的应用程序中。
请帮忙。
最佳答案
我为此使用了一些技巧。
创建一个与您的过程返回的数据具有相同数据结构的 View ,并将其添加到您的 edmx。它不必是任何合乎逻辑的。可以像:
从 x 中选择 1 作为 AccountId,'ABC' 作为 AccountName,(...);
只要它有正确的数据类型。但是,如果您的程序仅过滤一些您可以放入 View 中的数据,我建议您创建一个有意义的 View 。
在 EF 中映射您的过程时,选择映射 View 作为返回类型。
您不必从过程中返回 View 。您可以返回任何数据,只要它具有与 View 匹配的结构。
在 C# 中,您的过程现在将返回 View 项的集合。
这对我在 MSSQL 上有效,所以请告诉我你是否成功地在 MySQL 上启动它。
关于c# - Entity Framework 存储过程单一结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37519869/